Вопрос или проблема
Я хочу увидеть, какие файлы будут удалены при выполнении команды rm
в Linux. Большинство команд, кажется, имеют опцию “dry run”, чтобы показать такую информацию, но я не могу найти такую опцию для rm
. Возможно ли это?
Предположим, вы хотите выполнить:
rm -- *.txt
Вы можете просто выполнить:
echo rm -- *.txt
или даже просто:
echo *.txt
чтобы увидеть, какие файлы rm
удалит, потому что именно оболочка разворачивает *.txt
, а не rm
.
Единственный случай, когда это не поможет, это для rm -r
.
Если вы хотите удалить файлы и каталоги рекурсивно, вы можете использовать find
вместо rm -r
, например:
find . -depth -name "*.txt" -print
затем, если это делает то, что вам нужно, измените -print
на -delete
:
find . -depth -name "*.txt" -delete
(-delete
подразумевает -depth
, мы все равно добавляем его, как рекомендуется в руководстве GNU find
).
Вы можете сказать:
rm -i
чтобы запустить его в интерактивном режиме, так rm
будет запрашивать у вас подтверждение, нужно ли удалить каждый файл. Вы можете просто ответить “нет” для каждого файла, чтобы увидеть, какие из них будут затронуты.
Вы можете использовать ls
, чтобы перечислить все файлы, которые будут удалены с помощью rm
:
ls ../path/*.txt
Если вам нужно перечислить файлы, которые будут удалены с помощью рекурсивной команды rm
, используйте флаг -R
с ls
:
ls -R ../path/*.txt
Просто хотел с опозданием указать на удобное решение, которое Joshua упомянул в комментариях:
yes n | rm -i myFile1 myFile2 myFile3
Это запускает rm
в интерактивном режиме, который запрашивает ответ y/n для каждого файла, который будет удален, но с помощью yes n
автоматически отклоняет этот запрос для каждого файла. Вывод не очень красивый, но его можно анализировать с небольшим постобработкой.
вместо rm вы также можете использовать gtrash put -- files
, чтобы переместить их в корзину. Пожалуйста, попробуйте это с тестовым файлом сначала.
Ответ или решение
В данном случае, вы хотите провести "пробный запуск" команды rm
в Linux для оценки, какие файлы будут удалены до фактического выполнения команды. Стандартно, команда rm
не предоставляет опции "dry run", однако существуют альтернативные методы для достижения подобного результата.
Расширение оболочки и команда echo:
Если вашей целью является удаление определённой группы файлов, например, всех текстовых файлов *.txt
, вы можете использовать команду echo
для предварительного просмотра, какие файлы подлежат удалению. Следующие команды помогут вам в этом:
echo rm -- *.txt
или просто
echo *.txt
Эти команды используют механизм расширения файловых масок (globbing), встроенный в оболочку командной строки, чтобы показать список файлов, которые будут затронуты.
Использование команды find:
В случае, если вы рассматриваете рекурсивное удаление файлов и директорий с помощью rm -r
, рекомендуется воспользоваться командой find
. Это может быть полезно для сложных сценариев, включая рекурсивные файловые структуры:
find . -depth -name "*.txt" -print
Эта команда рекурсивно ищет все текстовые файлы и выводит их на экран. После проверки вы можете изменить -print
на -delete
, чтобы удалить файлы:
find . -depth -name "*.txt" -delete
Взаимодействие с пользователем:
Команда rm -i
позволяет запускать rm
в интерактивном режиме, запрашивая подтверждение перед удалением каждого файла:
rm -i *.txt
Для автоматического отклонения всех запросов на удаление можете использовать:
yes n | rm -i *.txt
Альтернативные способы проверки:
Ещё один вариант — использование команды ls
для предварительного отображения списка файлов:
ls ../path/*.txt
Для рекурсивного поиска используйте флаг -R
:
ls -R ../path/*.txt
Перемещение в корзину:
Если вам необходимо безопасно удалить файлы, рассмотрите возможность использования команды gtrash
для перемещения файлов в корзину:
gtrash put -- *.txt
Перед применением этого метода протестируйте его на одном файле, чтобы избежать нежелательных потерь данных.
В заключение, несмотря на отсутствие стандартной опции "dry run" в rm
, комбинация вышеописанных приемов позволяет с уверенностью предсказать результат выполнения команды, обеспечивая точность и безопасность ваших операций с файлами.