Команда
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
- это то, что вы хотите узнать.