2015-08-12 3 views
2

Я безуспешно искал решение для удаления всех файлов внутри рабочего каталога, за исключением внутренних подкаталогов.Как удалить все файлы, кроме каталогов?

Я нашел способ удалить все файлы во всех каталогах, но я ищу способ удалить только файлы на том же уровне, на котором я включен.

ответ

4
find . -maxdepth 1 -type f -print0 | xargs -0 rm 

Команда find рекурсивно ищет каталог для файлов и папок, которые соответствуют указанным выражения.

  • -maxdepth 1 будет искать только текущий уровень (при использовании с . или верхним уровнем, когда каталог используются вместо этого), превращая рекурсивной функцию поиска
  • -type f определяет только файлы, и все файлы

@chepner рекомендуется улучшение на вышесказанном, чтобы просто использовать

find . -maxdepth 1 -type f -delete 

Не уверен, почему я не думал об этом в первую очередь, но так или иначе.

+1

Если доступно '-print0', скорее всего, это' -delete'. – chepner

+1

Это замечательно и универсально, хотя я получаю следующий вывод: find: warning: вы указали параметр -maxdepth после аргумента аргумента non-option, но параметры не являются позиционными (-maxdepth влияет на тесты, указанные перед ним, а также те, которые указаны после него). Пожалуйста, укажите параметры перед другими аргументами. rm: missing operand Попробуйте 'rm --help 'для получения дополнительной информации. Все файлы в папке были удалены. –

+1

просто переключайте аргументы, 'find' хочет' -maxdepth' ... ну, во-вторых, перед '-type' – KurzedMetal

0

Я думаю, что это так же просто, как это:

$ rm * 

когда внутри рабочей директории.

Я протестировал его, и он сработал - он удалил все файлы в рабочем каталоге и не повлиял на какие-либо файлы внутри любого подкаталога.

+1

Это вызывает ошибку, если есть папка, хотя ... – IKavanagh

+0

@IKavanagh, но она все еще успешно удаляет все файлы. Спасибо, что указали это в любом случае! –

+1

Как вы узнали, удалены ли файлы, хотя, скажем, скрипт? – IKavanagh