В настоящее время я пытаюсь удалить некоторые файлы. Файлы, которые я хочу удалить, содержат число 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: [ ! d1]
rm K*[23]*.wav
Если вы хотите сделать это более безопасным, заставив rm запросить подтверждение для каждого файла, используйте интерактивный флаг -i:
rm -i K*[23]*.wav
Если вам нужно избегать сопоставления 22, 23, 32, 33, вам понадобится нечто более сложное, например, AFSHIN's ответ.
Вы можете использовать shell globs:
rm *2* *3*
Это приведет к удалению всех файлов (не каталогов) внутри текущего рабочего каталога, которые будут согласованы с любым из *2* или *3* globs.
В этих шарах «* всегда означает« любое число (включая ноль) любого символа ».
Обратите внимание, что глобусы IIRC Bash не соответствуют скрытым файлам (имя файла начиная с .) по умолчанию.
Для текущего каталога или любого другого местоположения:
Запустите это, чтобы увидеть, что нужно удалить:find . -type f -iname "*[32]*.wav"
Затем удалить с помощью: find . -type f -iname "*[32]*.wav" -delete
Дополнительная информация: [ ! d6] . означает текущий каталог, также может быть путь к местоположению файла, например /path/to/files. Чтобы предотвратить перемещение find в любой каталог целевого объекта, используйте параметр -maxdepth 1, следовательно: [ f7] Если в целевом каталоге используйте: 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, который позволяет просмотреть перед запуском Command:
$ echo *2* *3*
(list of files with 2 or 3 in name)
Это только тест glob shell (работает в bash), если список верен, pipe it to xargs:
$ echo *2* *3* | xargs rm -v
Опция -v показывает файлы, которые удаляются rm. Вы можете быть более параноидальными и добавить параметр -i с помощью -v, чтобы он запрашивал каждое удаление.
Вы можете использовать shell globs:
rm *2* *3*
Это приведет к удалению всех файлов (не каталогов) внутри текущего рабочего каталога, которые будут согласованы с любым из *2* или *3* globs.
В этих шарах «* всегда означает« любое число (включая ноль) любого символа ».
Обратите внимание, что глобусы IIRC Bash не соответствуют скрытым файлам (имя файла начиная с .) по умолчанию.
Для текущего каталога или любого другого местоположения:
Запустите это, чтобы увидеть, что нужно удалить:find . -type f -iname "*[32]*.wav"
Затем удалить с помощью: find . -type f -iname "*[32]*.wav" -delete
Дополнительная информация: [ ! d6] . означает текущий каталог, также может быть путь к местоположению файла, например /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" иначе все (ваши файлы) будут удалены!
Я поклонник xargs, который позволяет просмотреть перед запуском Command:
$ echo *2* *3*
(list of files with 2 or 3 in name)
Это только тест glob shell (работает в bash), если список верен, pipe it to xargs:
$ echo *2* *3* | xargs rm -v
Опция -v показывает файлы, которые удаляются rm. Вы можете быть более параноидальными и добавить параметр -i с помощью -v, чтобы он запрашивал каждое удаление.
Вы можете использовать shell globs:
rm *2* *3*
Это приведет к удалению всех файлов (не каталогов) внутри текущего рабочего каталога, которые будут согласованы с любым из *2* или *3* globs.
В этих шарах «* всегда означает« любое число (включая ноль) любого символа ».
Обратите внимание, что глобусы IIRC Bash не соответствуют скрытым файлам (имя файла начиная с .) по умолчанию.
Для текущего каталога или любого другого местоположения:
Запустите это, чтобы увидеть, что нужно удалить:find . -type f -iname "*[32]*.wav"
Затем удалить с помощью: find . -type f -iname "*[32]*.wav" -delete
Дополнительная информация: [ ! d6] . означает текущий каталог, также может быть путь к местоположению файла, например /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" иначе все (ваши файлы) будут удалены!
Я поклонник xargs, который позволяет просмотреть перед запуском Command:
$ echo *2* *3*
(list of files with 2 or 3 in name)
Это только тест glob shell (работает в bash), если список верен, pipe it to xargs:
$ echo *2* *3* | xargs rm -v
Опция -v показывает файлы, которые удаляются rm. Вы можете быть более параноидальными и добавить параметр -i с помощью -v, чтобы он запрашивал каждое удаление.