Как я могу удалить все файлы в моей папке, кроме Music-subfolder? - PullRequest
0 голосов
/ 17 января 2009

Дублирование

Невозможно удалить все остальное в папке, кроме FileA

Я думаю, что это немного похоже на это: удалить [^ Music]

Однако это не работает.

Ответы [ 3 ]

4 голосов
/ 15 марта 2009

Поместите следующую команду в ваш ~ / .bashrc

shopt -s extglob 

Теперь вы можете удалить все остальное в папке, кроме папки «Музыка», с помощью

rm -r !(Music)

Пожалуйста, будьте осторожны с командой. Он мощный, но и опасный.

Рекомендую всегда проверять с помощью команды

echo rm -r !(Music)
2 голосов
/ 17 января 2009

Команда

rm (ls | grep -v '^Music$')

должно работать. Если некоторые из ваших «файлов» также являются подкаталогами, то вы также хотите рекурсивно удалить их:

rm -r (ls | grep -v '^Music$')

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

ls | grep -v '^Music$'

Объяснение

  • Команда ls выводит содержимое каталога; без аргумента по умолчанию используется текущий каталог.
  • Символ канала | перенаправляет вывод в другую команду; когда вывод ls перенаправляется таким образом, он печатает имена файлов по одному на строку, а не в формате столбца, как вы увидите, если вы наберете ls на интерактивном терминале.
  • Команда grep сопоставляет строки для шаблонов; переключатель -v означает печать строк, которые не соответствуют шаблону.
  • Шаблон ^Music$ означает совпадение строки, начинающейся и заканчивающейся Music - то есть только строку Music; Эффект символов ^ (начало строки) и $ (конец строки) также может быть достигнут с помощью переключателя -x, как в grep -vx Music.
  • Синтаксис command (subcommand) - это способ, с помощью которого fish принимает выходные данные одной команды и передает их в качестве аргументов командной строки другой.
  • Команда rm удаляет файлы. По умолчанию он не удаляет каталоги, но параметр -r («рекурсивный») изменяет это.

Вы можете узнать об этих и других командах, набрав man command, где command - это то, что вы хотите узнать.

0 голосов
/ 25 апреля 2014

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

find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...