Я нашел несколько примеров, которые работают, если в именах файлов нет пробелов. К сожалению, в моих именах файлов есть пробелы (это не мой выбор, на самом деле, именно их мне нужно удалить).
Вот, например, что, по моему мнению, сработает:
найти . -type f | grep ).MOV | xargs rm
потому что я хочу удалить такие файлы как:
- L112 (1).MOV
- L113 (1).MOV
- L113 (2).MOV
- и т. д.
и я хочу сохранить файлы как
- L112.MOV
- L113.MOV
- L114.MOV
- и т. д.
Это позволяет правильно найти файлы:
найти . -тип f | grep ).MOV
но когда я передаю его в rm, пробелы в имени файла все портят.
Любая помощь будет высоко оценена.
решение1
rm *\).MOV
решение2
Укажите, xargs
что в качестве разделителей следует использовать символы новой строки:
find . -type f | grep ).MOV | xargs -d'\n' rm
Лучше, сделайте find
сопоставление и используйте -print0
и, xargs -0
чтобы разрешитьлюбойсимвол в именах файлов, даже \n
!
find . -type f -name '*).MOV' -print0 | xargs -0 rm
А еще лучше — просто find
позвоните rm
напрямую.
find . -type f -name '*).MOV' -exec rm {} +
Лучше пропустите rm
и find
удалите.
find . -type f -name '*).MOV' -delete
Или в данном конкретном случае кому нужна вся эта тяжелая техника?
rm *\).MOV
решение3
Попробуй это:
find . -name "*).MOV" -exec rm {} \;
решение4
В большинстве установок Unix вы можете обозначить пробел в имени файла, добавив к нему обратную косую черту. Например, попробуйте это:
mkdir blah
cd blah
touch file1
touch file2
touch "file 3"
touch "file 4"
Введите «ls», и вы должны увидеть следующее:
файл 3 файл 4 файл1 файл2
Теперь выполните «ls *\ *», и вы должны увидеть все с пробелами внутри:
файл 3 файл 4
Так может быть, вам достаточно просто "rm *\ *"? Или немного измените это регулярное выражение, чтобы оно соответствовало вашим потребностям.
Надеюсь, это поможет!