Как я могу использовать xargs для копирования файлов с пробелами и кавычками в именах? - PullRequest
216 голосов
/ 27 сентября 2008

Я пытаюсь скопировать кучу файлов в каталог, и в именах некоторых файлов есть пробелы и одинарные кавычки. Когда я пытаюсь связать вместе find и grep с xargs, я получаю следующую ошибку:

find .|grep "FooBar"|xargs -I{} cp "{}" ~/foo/bar
xargs: unterminated quote

Есть предложения по более эффективному использованию xargs?

Это на Mac OS X 10.5.3 (Leopard) с BSD xargs.

Ответы [ 21 ]

0 голосов
/ 21 мая 2014

Если вы используете Bash, вы можете преобразовать stdout в массив строк по mapfile:

find . | grep "FooBar" | (mapfile -t; cp "${MAPFILE[@]}" ~/foobar)

Преимущества:

  • Он встроен, поэтому он быстрее.
  • Выполните команду со всеми именами файлов за один раз, чтобы она была быстрее.
  • Вы можете добавить другие аргументы к именам файлов. Для cp вы также можете:

    find . -name '*FooBar*' -exec cp -t ~/foobar -- {} +
    

    однако, некоторые команды не имеют такой функции.

Недостатки:

  • Возможно, не очень хорошо масштабируется, если слишком много имен файлов. (Предел? Я не знаю, но я протестировал файл со списком 10 МБ, который включает в себя более 10000 имен файлов без проблем, под Debian)

Ну ... кто знает, доступен ли Bash в OS X?

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