рекурсивное перемещение файлов в Linux - PullRequest
4 голосов
/ 07 января 2010

find ./dir -type f -iname "*.t[argz]*[bz2]" -print | xargs mv --target-directory=dir Кажется, сбой в файле с пробелами в имени. как это улучшить? или альтернатива?

спасибо за ответ ниже: мой mv не поддерживает --null или -0, я использую cygwin:

$ mv --help
Usage: mv [OPTION]... [-T] SOURCE DEST
  or:  mv [OPTION]... SOURCE... DIRECTORY
  or:  mv [OPTION]... -t DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

Mandatory arguments t
.

Ответы [ 3 ]

7 голосов
/ 07 января 2010

Используйте -print0 вместо -print в команде find и опции xargs -0 (или --null) - тогда в качестве разделителей будут использоваться NUL, а не переводы строк и пробелы.

find ./dir -type f -iname "*.t[argz]*[bz2]" -print0 | xargs --null mv --target-directory=dir
0 голосов
/ 08 января 2010

GNU найти

find ./dir -type f -iname "*.t[argz]*[bz2]" -exec mv "{}" /destination +;
0 голосов
/ 07 января 2010

Вы смотрели опцию -exec для поиска?

find ./dir -type f -iname "*.t[argz][bz2]" -exec mv {} --target-directory=dir ';' 

Опция -exec будет выполнять любые параметры, следующие за ней в качестве команды, пока не увидит точку с запятой, заключенную в кавычки. Таким образом, вам не придется разбираться с пробелами.

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