Что самый эффективный путь состоит в том, чтобы переместить большое количество файлов, которые находятся в единственном каталоге?

Большинство двоичных файлов компилируется, чтобы быть установленным в определенные местоположения под /.

Существуют некорневые диспетчеры пакетов как хинду Префикс и Беспочвенный GoboLinux и возможно 0install.

Поскольку Вы сказали, что компиляция себя облегчит ту проблему или использование chroot. Однако Ваше самое большое препятствие с chrooting будет предпосылками и соединением с общими объектами ядра.

8
28.11.2013, 02:10
5 ответов

Использование в своих интересах GNU mv -t опция указать целевой каталог, вместо того, чтобы полагаться на последний аргумент:

find . -name "*" -maxdepth 1 -exec mv -t /home/foo2/bulk2 {} +

Если бы Вы были в системе без опции, то Вы могли бы использовать промежуточную оболочку для получения аргументов в правильном порядке (find … -exec … + не поддерживает помещающие дополнительные аргументы после списка файлов).

find . -name "*" -maxdepth 1 -exec sh -c 'mv "$@" "$0"' /home/foo2/bulk2 {} +
14
27.01.2020, 20:09
  • 1
    Можно использовать, находят... - должностное лицо sh-c 'вздор "$" вздор' sh {} +" ("прием оболочки") заниматься проблемами вокруг упорядочивания аргумента. Существует несколько примеров этого в findutils (информация) документация; поиск "sh-c". –  James Youngman 10.12.2013, 01:12

Рассмотреть mvлуг родительский каталог вместо файлов:

mv /home/foo/bulk /home/foo2/bulk2 && mkdir /home/foo/bulk

(Но это могло бы вызвать проблемы если /home/foo/bulk должен существовать в каждый момент.)

5
27.01.2020, 20:09
  • 1
    , который я добавил бы к этому, на всякий случай Ваш целевой каталог, существует, переместите файлы в целевой каталог к Вашему исходному каталогу (большой) и переименуйте каталог. –  sbenitezb 28.11.2013, 05:57
  • 2
    Спасибо - большое предложение. В этом случае каталог должен существовать в каждый момент. Прекрасная идея все же. –  Mike B 28.11.2013, 22:20

Только для разнообразия, я люблю использование cpio для некоторых случаев как это.

find tmp |cpio -v  -p --make-directories --sparse tmp2
0
27.01.2020, 20:09
  • 1
    Если источник и место назначения находятся в той же файловой системе затем, этот подход мог бы быть очень неэффективным (ненужное копирование). Также всегда лучше использовать -print0 и -0 опции. –  pabouk 28.11.2013, 11:11
[1187241] В GNU [1187619]mv[1187620]:

В системах типа OS X, которые не имеют [1187621]mv -t[1187622], но имеют [1187623] -print0[1187624] и [1187625]xargs -0[1187626]:

Или если имена файлов не содержат пробелов, кавычек, обратных слэшей или новых строк (в OS X [1187627]xargs[1187628]) или кавычек, обратных слэшей или новых строк (в GNU [1187629]xargs[1187630]):

0
27.01.2020, 20:09

В течение определенного времени попробуйте следующее:

find . -name "*" -type f -mtime +7 -exec mv -t /folder/to/transfer/files {} +
-3
27.01.2020, 20:09

Теги

Похожие вопросы