Как запустить пробный запуск rm, чтобы увидеть, какие файлы будут удалены?

87

Я хочу посмотреть, какие файлы будут удалены при выполнении rmв Linux. Большинство команд, кажется, имеют опцию пробного запуска, чтобы показать именно такую ​​информацию, но я не могу найти такую ​​опцию для rm. Это вообще возможно?

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

Ответы:

121

Скажем, вы хотите запустить:

rm *.txt

Вы можете просто запустить:

echo rm *.txt

или даже просто:

echo *.txt

чтобы увидеть, какие файлы rmбудут удалены, потому что это расширение оболочки *.txt, а не rm.

Единственный раз, когда это не поможет вам, для rm -r.

Если вы хотите рекурсивно удалять файлы и каталоги, вы можете использовать findвместо rm -r, например,

find . -name "*.txt" -print

затем , если он делает то , что вы хотите, изменить -printна -delete:

find . -name "*.txt" -delete
Mikel
источник
найти хороший выбор ИМО. И если вы хотите использовать графическое представление tree.
шумел
2
Практически идеально. find . -name "*.txt" -deleteне кажется рекурсивным, хотя Удалил все файлы, но не удалил каталоги, которые были перечислены в-print
Оскар Годсон
1
@OscarGodson Предполагая, что каталоги остались пустыми после удаления файлов, вы можете удалить их с помощьюfind . -type d -empty -delete
datguy
1
@OscarGodson - findне удаляет каталоги, которые все еще содержат файлы (эквивалентно rm dir/без -r). Сначала вам придется очистить каталог - или использовать findдля -exec rmэтого соответствующие параметры. напр.find . -depth -name "*.txt" -exec rm -r {} +
шаломб
Использование echo rm *.txtметода, кажется, имеет недостаток. Он представляет результаты в объединенном списке (длинная строка с одним файлом после предыдущего), в отличие от вертикального списка. Есть ли способ получить вывод для отображения в вертикальном списке (один файл в строке)? (ОБНОВЛЕНИЕ: я вижу, что findметод делает то, что я просил. Поэтому я буду работать с этим.)
inspirednz
16

Ты можешь сказать:

rm -i

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

Джастин этир
источник
8
Это довольно сложно с большим количеством файлов.
Кори Кляйн
9
да п | rm -i # комментарий, чтобы соответствовать минимальной длине комментария
Джошуа
4

Вы можете использовать lsдля просмотра всех файлов, которые будут удалены rm:

ls ../path/*.txt

Если вам нужно просмотреть список для просмотра файлов, которые будут удалены рекурсивно rm, то используйте -Rфлаг с ls:

ls -R ../path/*.txt
Венет Редди
источник
Хорошая точка зрения. Хотя, если вы знаете уровень вложенности, вы можете достичь этого:ls */*/*.txt
Veneet Reddy
1
Вы правы. С -Rвозможностью.
Венет Редди