Я в настоящее время пытаюсь удалить некоторые файлы. Файлы, которые я хочу удалить, содержат номер 3 или 2, или оба или один из них.
Как я удаляю файлы, содержащие те числа?
Как файлы называют так:
K-0_0_1_1_1_1_1_0.wav
K-0_0_1_1_1_1_1_1.wav
K-0_1_0_0_0_0_0_0.wav
K-0_1_0_0_0_0_0_1.wav
K-0_1_0_0_0_0_1_0.wav
K-0_0_0_0_0_0_0_2.wav
K-0_0_0_0_0_0_0_3.wav
K-0_0_0_0_0_0_1_2.wav
В этом списке должны быть удалены последние три файла.
Для текущего каталога можно использовать:
rm -- *[23]*
Если Вы хотите ограничить его, соответствовать только файлам, где 2 или 3 должны произойти между K
и .wav
:
rm K*[23]*.wav
Если Вы хотите сделать это более безопасным путем принуждения rm
для просьбы подтверждение для каждого файла используйте -i
интерактивный флаг:
rm -i K*[23]*.wav
*
соответствия любое число (включая нуль) любых символов[some chars]
класс символов - что-либо внутри может соответствовать--
распознан rm
как конец опций. Это избегает ошибок, если какие-либо имена файлов начинаются -
; иначе имя файла может быть интерпретировано как опцияЕсли необходимо постараться не соответствовать 22
, 23
, 32
, 33
, Вам будет нужно что-то немного более сложное, как ответ AFSHIN.
Можно использовать шарики оболочки:
rm *2* *3*
Это удалит все файлы (не каталоги) в текущем рабочем каталоге, который подобран любым из *2*
или *3*
шарики.
В тех шариках,"*
всегда означает "любое число (включая нуль) любого символа".
Обратите внимание однако, что шарики Bash IIRC не соответствуют скрытым файлам (имя файла, запускающееся с a .
) по умолчанию.
Для текущего каталога или любого другого местоположения:
Выполните это для наблюдения то, что должно быть удалено:
find . -type f -iname "*[32]*.wav"
Затем удалите с:
find . -type f -iname "*[32]*.wav" -delete
Больше информации:
.
текущий каталог средств, мог также быть путь к местоположению файла, как /path/to/files
find
от перемещения в любой каталог в намеченной цели используют опцию -maxdepth 1
, следовательно: find . -maxdepth 1 -type f -iname "*[32]*.wav" -delete
find . -maxdepth 1 -type f -iname "*[32]*.wav" -delete
Внимание
Никогда не делайте это find . -delete -type f -iname "*[32]*.wav"
еще все (Ваши файлы) будут удалены!
В то время как данные ответы также удаляют файлы включая *23*
, *32*
, *2*3*
, *3*2*
, *2*
или *3*
шаблоны файлов + этот ответ с rm *2* *3*
решение попытается удалить файл K-0_0_0_0_3_0_1_2.wav
два раза и вторая попытка будет отказавший, поскольку она удалена *2*
подобранный шаблон!.
Избегать их, ниже - команда, которая только возвращает файлы включая 2
или 3
или оба на их имена, только повторенные однажды.
find . -type f -name "*[^0-9][2|3][^0-9]*" #-delete
Или в rm
Вы могли использовать следующее вместо этого.
rm -- *[^0-9][23][^0-9]*
Я - поклонник xargs
, который позволяет предварительный просмотр прежде, чем выполнить Команду:
$ echo *2* *3*
(list of files with 2 or 3 in name)
Это - только тест шарика оболочки (работы в ударе), если список корректен, передайте его по каналу к xargs:
$ echo *2* *3* | xargs rm -v
-v
файлы списков опций rm
удаляет. Вы могли быть более параноиками и добавить -i
опция с -v
таким образом, это запрашивает каждое удаление.