Как я могу удалить файлы, содержащие номер '3' или '2' в их имени файла?

Я в настоящее время пытаюсь удалить некоторые файлы. Файлы, которые я хочу удалить, содержат номер 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

В этом списке должны быть удалены последние три файла.

5
задан 23 August 2017 в 10:54

5 ответов

Для текущего каталога можно использовать:

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.

20
ответ дан 23 November 2019 в 08:35

Можно использовать шарики оболочки:

rm *2* *3*

Это удалит все файлы (не каталоги) в текущем рабочем каталоге, который подобран любым из *2* или *3* шарики.

В тех шариках,"* всегда означает "любое число (включая нуль) любого символа".

Обратите внимание однако, что шарики Bash IIRC не соответствуют скрытым файлам (имя файла, запускающееся с a .) по умолчанию.

8
ответ дан 23 November 2019 в 08:35

Для текущего каталога или любого другого местоположения:

  1. Выполните это для наблюдения то, что должно быть удалено:

    find . -type f -iname "*[32]*.wav" 
    
  2. Затем удалите с:

    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" еще все (Ваши файлы) будут удалены!

5
ответ дан 23 November 2019 в 08:35

В то время как данные ответы также удаляют файлы включая *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]*
2
ответ дан 23 November 2019 в 08:35

Я - поклонник xargs, который позволяет предварительный просмотр прежде, чем выполнить Команду:

$ echo *2* *3*
(list of files with 2 or 3 in name)

Это - только тест шарика оболочки (работы в ударе), если список корректен, передайте его по каналу к xargs:

$ echo *2* *3* | xargs rm -v

-v файлы списков опций rm удаляет. Вы могли быть более параноиками и добавить -i опция с -v таким образом, это запрашивает каждое удаление.

0
ответ дан 23 November 2019 в 08:35

Другие вопросы по тегам:

Похожие вопросы: