Жесткие кодированные решения
tee
Echo ничего и просто отправить его на несколько файлов с помощью команды tee
.
Как это:
$ echo -n | tee file1 file2 file3 file4 file5
Все файлы в этом списке будут пустыми и создано, если они не существуют.
Применительно к вашему ответу это будет:
$ cat /dev/null | tee fileABC fileXYZ
Хотя echo -n
считается лучшей практикой, чем cat /dev/null
, еще лучшим решением было бы использовать printf ''
, как отметил Чарльз Даффи. В результате в следующей команде:
$ printf '' | tee file1 file2 file3
truncate
Как ответил skrilled, truncate
, вероятно, решение, которое вы изначально искали. Команда позволяет произвольно указать многие аргументы имени файла. Вы можете легко использовать его следующим образом:
$ truncate --size 0 file1 file2 file3 file4 file5
, который позволяет достичь своей цели без использования труб и в одной команде, довольно изящная ответ поставляется здесь skrilled.
Структурные имена файлов решения
Если все файлы имеют структуру на их имена (например java файлов) и местоположения вы можете использовать команды поиска. В следующем примере я применил стирание ко всем .java
и .c
исходным файлам в текущем каталоге и во всех каталогах внутри текущего каталога.
$ find . -maxdepth 2 -type f -name '*.java' -exec truncate --size 0 "{}" \;
Разъяснение:
find .
выполнить find
в текущем каталоге .
-maxdepth 2
уровень рекурсии, спуск в каталоги в каталоге, но не далее (уровень 2).Установите это значение 1, чтобы не спуститься, или n
, чтобы спуститься n
раз.
-type f
применяется только к файлам, а не каталоги
-name '*.java'
применяются только к файлам, заканчивающимся в .java
-exec truncate --size 0 "{}" \;
срезанных каждый найденный файл (имя файла хранятся в {}
)
См man find
для больше вариантов и более подробное объяснение. Обязательно проверьте это, потому что find
- один из самых мощных инструментов для автоматизации редактирования файлов.
Список файлов в отдельном файле решения
Проще всего сделать, может быть, чтобы хранить файлы, чтобы стереть в файле, строка за строкой. Если нет очевидной структуры в отношении их местоположения и имени, то есть.
Скажем, файлы хранятся в файле с именем erasure
.
$ cat erasure
fileABC
fileXYZ
dir/anotherFile
В этом примере мы удалим три файла, которые перечислены выше.
$ while read file; do > "$file"; done < erasure
Объяснение:
while read file
для каждой строки в данном файле, сохранить строку в переменной file
do > "$file"
пустой файл и вывода ничего в нем (т.е. удалить его)
done < erasure
указать входной файл, используя <
(перенаправление)
Примечание: в то время как этот метод сохраняет пробелы в пути, он не справляется с обратными косыми чертами и задним пробелом, как указано Charles Duffy. Одним из способов устранения обеих проблем является изменение цикла следующим образом:
while IFS= read -r file; do > "$file"; done < erasure
Но новые строки в именах файлов по-прежнему будут проблемой. Единственный способ обойти эту проблему - отделить имена файлов, используя нулевое завершение (\0
). Правильный цикл теперь становится:
while IFS= read -r -d '' file; do > "$file"; done < erasure
'ф DEV/нуль/whatever' не имеет смысла для меня. null - это файл устройства –
Сделал некоторые изменения. Я имел в виду, что это кошка. pl проверить это для очистки содержимого существующего файла http://goo.gl/UJXEy3 –
@Samuel u r right. но как я могу сделать то же самое для 10-15 файлов за один раз. –