Я нашел несколько примеров, которые работают, пока нет никаких пробелов в именах файлов. К сожалению, у меня есть пробелы в моих именах файлов (не мой выбор, на самом деле они - те, я должен удалить).
Так, например, это - то, что я думал, будет работать:
найти. - тип f | grep).MOV | xargs комната
потому что я хочу удалить файлы как:
и я хочу сохранить файлы как
Это находит файлы правильно:
найти. - тип f | grep).MOV
но когда я передаю его по каналу к комнате, пробелы в имени файла завинчивают его.
Любая справка значительно ценилась бы.
Сказать 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
Попробуйте это:
find . -name "*).MOV" -exec rm {} \;
Много инструментов Unix хрупки (или по крайней мере хитры для использования правильно) в присутствии имен файлов, содержащих пробелы и вкладки или еще худшие, новые строки, поэтому когда у Вас есть выбор, необходимо избежать этих символов в именах файлов.
Однако, если Вы захотите удалить все файлы в текущем каталоге (и все подкаталоги) с пространством на имя, то следующее будет работать.
find . -name '* *' -print0 | xargs -0 rm -f
-print0
опция говорит, находят для использования байта NUL (\0) в качестве разделителя между именами файлов вместо NL (\n). С другой стороны, -0
говорит xargs использовать NUL в качестве разделителя строки вместо NL. Измените аргумент шаблона к -name
опция по мере необходимости для соответствия файлам Вы хотите удалить.
Это может быть немного хитро для предотвращения find
от рекурсивного вызова в подкаталоги (хотя выезд -maxdepth
аргумент), поэтому если Вы только хотите влиять на файлы в текущем каталоге, Вы могли бы хотеть приблизиться к проблеме по-другому.
В целом, я настоятельно рекомендую стать быстрым с find
и xargs
. Индивидуально, и особенно при объединении в цепочку вместе как показано выше они делают чрезвычайно гибкий инструментарий для объемных операций файла.
В большинстве установок Unix можно обозначить пространство в имени файла путем добавления префикса его обратную косую черту. Так, например, испытайте это:
mkdir blah
cd blah
touch file1
touch file2
touch "file 3"
touch "file 4"
Сделайте "ls", и необходимо видеть это:
файл 4 file1 file2 файла 3
Теперь сделайте "ls *\*", и необходимо видеть все с пространством в нем:
файл 4 файла 3
Таким образом, возможно, просто "комната *\*" является всем, в чем Вы нуждаетесь? Или измените то регулярное выражение немного для установки потребностям.
Надежда, которая помогает!