рекурсивное перемещение файлов в linux
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 ответа:
Используйте
-print0
вместоfind
, а параметр xargs-0
(или--null
) - тогда в качестве разделителей будут использоваться нули, а не новые строки и пробелы.find ./dir -type f -iname "*.t[argz]*[bz2]" -print0 | xargs --null mv --target-directory=dir
Вы смотрели на опцию-exec для поиска?
find ./dir -type f -iname "*.t[argz][bz2]" -exec mv {} --target-directory=dir ';'
Параметр-exec будет выполнять все параметры, следующие за ним как команда, пока не увидит точку с запятой, заключенную в кавычки. Таким образом, вам не придется иметь дело с проблемой интервалов.