Intereting Posts
Менеджер загрузки linux заблокирован Как вы пишете grub.cfg menuentry для Debian Netinst (8.2 от написания) для загрузки через USB? Почему surt1000xli APC UPS распознается драйвером aptsmart NUT как «старый»? Зачем нужна задержка после того, как ifconfig нужно до того, как сменить MAC-адрес? сумасшедший макет с GNOME 3 в монетном дворе 14 Рекомендации по распределению для настройки мультисезона с использованием двухголовочного и поддерживающего прямого рендеринга Почему в Linux существует несколько папок для исполняемых файлов? удалить новые строки Автозагрузка внешнего скомпилированного модуля при событии hotplug Сделать SSH не использовать VPN Выполнить команды терминала из базового программирования LibreOffice? Как найти тип файла img, чтобы он мог быть установлен Смена угла уведомления GNOME 3 влево-влево! Почему мой bashscript не работает? как обнаружить завершение видео в vlc

как удалить все файлы в папке, кроме только определенных файлов?

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

Например, имена файлов, которые я хочу сохранить:

file_1.png , another_file.jpg , some_music.mp3

Если вы используете bash:

 shopt -s extglob rm !(file1|file2|file3) 

После руководства bash !(pattern-list) соответствует чему-либо, кроме одного из заданных шаблонов и списка шаблонов, это список из одного или нескольких шаблонов, разделенных символом | ,

Создайте подкаталог tmp , переместите все файлы, которые вы хотите сохранить в этом каталоге, и затем выполните rm -f * . Это не повлияет на каталог tmp .

После этого просто выполните:

 mv tmp/* . rmdir tmp 

(Предполагая, что ни один из файлов, которые вы переместили, не начинается с точки).

Это один из немногих случаев, когда имеет смысл использовать мышь и файловый браузер, такой как Nautilus, где вы на самом деле можете Ctrl- кликнуть несколько файлов, которые хотите сохранить, а затем использовать меню: Edit -> Invert Selection чтобы получить другие файлы, а затем удалить их.

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

Если имя вашего каталога – foo, а имя файла – bar , сделайте следующее.

 find foo -type f -print0|grep -vzZ -f bar|xargs -0 rm 

Это делает следующее:

  1. find -type f ищет имена всех файлов в foo и его подкаталогах и выводит их в STDOUT. С опцией -print0 она ограничивает имена файлов с помощью NUL-байтов.
  2. grep -v -f bar исключает все имена файлов, которые соответствуют строке в строке . С опцией -z он обрабатывает свой вход как набор строк, ограниченных байтом NUL, с опцией -Z он делит свой вывод с помощью NUL-байта.
  3. xargs rm вызывает rm для удаления файлов. С параметром -0 он обрабатывает свой ввод как набор строк, ограниченных байтом NUL.

Это работает с именами файлов, содержащими пробелы.