Как я могу переместить файлы в каталог, где могут быть сотни или тысячи файлов в каталоге, и вы не можете быть уверены, есть ли в них ошибки ..
. Какой метод вы бы использовали?
То, как обращаться с обманщиками, будет различным, иногда мы перезаписываем, иногда нам нужно быть безопаснее. IO может быть важным, потому что это производственные серверы. Но данное количество подсказок для неповторяющихся файлов не вариант. Сохранение разрешений, временных меток и т. Д. Имеет важное значение. Обычно мы не знаем, что это за данные.
Ох, и это mv
не требуется rsync
, cp
решения приветствуются.
примечание: мы работаем с CentOS 5.5, поэтому дайте мне знать, если он не будет работать, потому что это более новая функция ...
command-line
rename
xenoterracide
источник
источник
mv
того, заботимся ли мы о сохранении в случае ... и сделали ли мы уже резервную копию. Этот вопрос довольно открытый. Я просто ищу хорошие варианты и, возможно, комментарий о том, может ли он укусить вас и как.mv * ../
илиmv -i * ../
?Ответы:
Я бы порекомендовал использовать rsync от родителя:
который создаст резервную копию всех существующих дубликатов в родительском файле в файл -original.
источник
-a
подразумевает-r
-l
дляcp
)-H
или--hard-links
флаги для rsync для сохранения жестких ссылок.--link-dest=DIR
флаг для достижения этого поведения следующим образом: онrsync -avP --link-dest=/path/to/src /path/to/src/* /path/to/dest/
будет жестко связывать dst / любые неизмененные файлы между src и src, в данном случае все файлы. Обычно вы видите, что этот флаг используется, когда вы хотите повторно связать резервные файлы без копирования их данных, таких как--link-dest=/most/recent/backup
.Это скопирует все в текущем каталоге в каталог над ним, сохранив все разрешения, используя жесткие ссылки для минимизации ввода-вывода, если это возможно, и при дублировании создает имя файла ~
после того
источник
В этом примере файлы будут перемещены из «/ parent / old-dir» в «/ parent»:
По правилам rsync он заменит дупс более новыми файлами из
old-dir
.источник
Можешь попробовать
который перезапишет дубликаты в ..
Вы можете использовать mv -u '{}', чтобы не перезаписывать, если дублирование в .. такое же или более новое
источник
..
вmv '{}' +
команду, поскольку + просто добавляет в конец.-exec mv -t .. -- {} +
. Портабельно:-exec sh -c 'mv -- "$@"' _ {} +
.mv -i
только подсказки, если пункт назначения существует.yes n | mv -i …
перемещает все файлы, которые не существуют в каталоге назначения. В FreeBSD и OSX вы можете сократить это доmv -n …
.Обратите внимание, что ни один из них не объединит аргумент каталога с существующим каталогом с тем же именем в каталоге назначения.
Отдельный вопрос - как действовать со всеми файлами в текущем каталоге. Есть две проблемы: захват всех файлов (без
*
точечных файлов) и не запуск в командной строке. В Linux (или в более общем случае с GNU find и GNU coreutils):С помощью GNU найдите, но не GNU coreutils (или более старые GNU coreutils):
Портабельно:
Как обычно, Zsh облегчает работу. Он не имеет внутреннего ограничения командной строки, поэтому, если вы используете его
mv
встроенную функцию, вам не нужно об этом беспокоиться. И вы можете сказать ему не игнорировать точечные файлы с помощьюD
квалификатора glob. Ограничение: это не работает в файловых системах (по состоянию на zsh 4.3.10).источник
Я сказал на нашем ML
очевидно, это не очень безопасно ... это перезапишет вещи. Это может иметь ограничения, с которыми я никогда не сталкивался.
источник
-
. Он не будет ловить файлы, чье имя начинается с.
.Ниже приведен шаблон Python, который я использовал для хорошего эффекта в прошлом.
источник