Удалите все файлы в каталоге

[118092] Код ниже будет искать не только каталог [118604] old[118605], но и его подкаталоги и удалять файлы из каталога [118606] new[118607], которые имеют то же самое имя и путь. Это будет работать со всеми усадьбами враждебных имён файлов (пробелы, новые строки и т.д.):

Аргумент [118608]-тип f[118609] говорит [118610]find[118611] искать файлы, а не каталоги. Аргумент [118612]-exec ... \;[118613] говорит [118614] найти[118615], что как только он найдет файл в [118616] старом [118617], он должен выполнить команду [118618]rm -f[118619] на своем контрагенте в подкаталоге [118620] new[118621].

Поскольку [118622]rm[118623] имеет опцию [118624]-f[118625], он будет беззвучно игнорировать файлы, которые не существуют. Это устраняет необходимость проверки существования файла в [118626]new [118627] перед попыткой его удаления. Также не будет запрашиваться перед удалением файлов. Это очень удобно при удалении большого количества файлов. Однако, [118628] убедитесь, что вы действительно хотите удалить файлы, прежде чем запускать этот сценарий [118629]. Для защиты, скрипт выйдет с ошибкой, если команда [118630] cd[118631] не удается.[118097].

1
13.03.2015, 10:13
4 ответа

Это * подбирает как файлы и каталогов . Чтобы удалить файлы только попробуйте это

find /media/d/data/ -maxdepth 1 -type f -delete
2
27.01.2020, 23:12

по умолчанию RM не удаляет каталоги. Если вы хотите, чтобы каталоги были удалены, используйте RM -RF . Если вы хотите подавить сообщение, используйте RM

2> / dev / null . Обратите внимание, что все другие сообщения об ошибке тоже подавляются.

3
27.01.2020, 23:12

posxly:

find ! -name . -prune -type f -exec rm -f {} +
2
27.01.2020, 23:12

RM Удаляет файлы, которые вы его говорите. * расширяется ко всем файлам (включая каталоги), поэтому вы говорите RM , чтобы удалить каталоги, которые он не будет делать.

Большинство оболочек не имеют способа исключить каталоги от образца подстановки. Узоры подстановочных знаков только соответствуют файлам по имени, а не по типу. Вместо этого можно использовать .

ZSH имеет Challifiers Challifiers , которые могут соответствовать файлам по типу, дату и т. Д. в ZSH , вы можете использовать

rm *(.)

, чтобы удалить все обычные файлы, либо варианты, как RM * (-.) Чтобы удалить обычные файлы и символическую ссылку на регулярные файлы, RM * (^ /) для удаления всех файлов, кроме каталогов и т. Д.

Обратите внимание, что * опускает точечные файлы (файлы, имя которых начинается с . ). Найти будет включать их. В ZSH, * по умолчанию опускает точечные файлы; Вы можете добавить D D в скобках (например, RM * (. d) ), чтобы включить их.

1
27.01.2020, 23:12

Теги

Похожие вопросы