удалить с bash много файлов с пробелами в их именах - PullRequest
0 голосов
/ 26 апреля 2020

Окей, мой вопрос, кажется, связан с этим: Проблема в сценарии с пробелами в имени файла , но, похоже, ответ не решает проблему, когда вам приходится иметь дело с кучей этих файлов , Допустим, я получил несколько имен файлов, которые хочу стереть с помощью find, и поместил их в текстовый файл. Затем я хочу удалить их, скажем, с rm. rm, кажется, не в состоянии интерпретировать пробелы в именах файлов, даже после того, как я поместил имена в кавычки вручную! Что бы вы предложили?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2020

Это зависит от того, как вы на самом деле обрабатываете список файлов (который вы еще не показали). Предполагая, что они есть по одному на строку в файле:

:: cat list
thishasnospaces
but this does

, тогда даже что-то подобное не будет работать, если у них есть пробелы:

:: for fspec in $(cat list) ; do echo "rm -f \"${fspec}\"" ; done
rm -rf "thishasnospaces"
rm -rf "but"
rm -rf "this"
rm -rf "does"

Это потому, что это обрабатывает все пробелы как идентичные. Тем не менее, вы можете сделать это с while l oop:

:: cat list | while read ; do echo "rm -f \"$REPLY\""; done
rm -f "thishasnospaces"
rm -f "but this does"

Вы увидите, что сохраняется один на строку. Просто удалите эхо, когда будете счастливы, оно сработает.

:: cat list | while read ; do rm -f "$REPLY"; done

Но имейте в виду, что все это может быть ненужным. Команда find уже имеет возможность удалять найденные файлы, используя опцию -delete. Если вы можете использовать это, будет гораздо меньше возиться с пробелами в именах файлов.

0 голосов
/ 26 апреля 2020

Зачем вам текстовый файл? Попробуйте что-то вроде:

touch "a b"
touch "c d"
find . -name "* *" -exec rm "{}" \;

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...