Я хочу удалить все файлы в каталоге, оставив только некоторые указанные файлы, они не имеют ничего общего по имени. Как я мог этого достичь?
Например, имена файлов, которые я хочу сохранить:
file_1.png
, another_file.jpg
,some_music.mp3
command-line
files
rm
AGamePlayer
источник
источник
shopt -u extglob
).Создайте подкаталог
tmp
, переместите все файлы, которые вы хотите сохранить, в этот каталог и сделайтеrm -f *
потом. Это не повлияет наtmp
каталог.После этого просто сделайте:
(Предполагается, что ни один из перемещенных файлов не начинается с точки).
Это один из немногих случаев, когда имеет смысл использовать мышь и файловый браузер, такой как Nautilus, где вы можете Ctrlщелкнуть несколько файлов, которые хотите сохранить, и затем использовать меню:
Edit -> Invert Selection
получить другие файлы и затем удалить их. ,источник
ls
чтобы увидеть, не пропустили ли вы какие-либо файлы, которые хотите сохранить.Добавьте имена файлов, которые вы хотите сохранить, в текстовый файл, по одному в строке. Этот файл не должен быть в каталоге, или вы должны добавить его имя тоже.
Если имя вашего каталога foo, а имя файла - bar , сделайте следующее.
Это делает следующее:
find -type f
ищет имена всех файлов в foo и его подкаталогах и печатает их в STDOUT. С опцией-print0
он разделяет имена файлов с байтами NUL.grep -v -f bar
исключает все имена файлов, которые соответствуют строке в строке . С опцией-z
он обрабатывает свои входные данные как набор строк, разделенных байтом NUL, с опцией-Z
он ограничивает свой вывод байтом NUL.xargs rm
звонитrm
несколько раз, чтобы удалить файлы. С параметром-0
он обрабатывает свой ввод как набор строк, разделенных байтом NUL.Это работает с именами файлов, содержащими пробелы.
источник
find
я бы предпочелfind . -maxdepth 1 ! -name 'file1' ! -name 'file2' -type f -exec rm -vi {} +