Я предпочитаю использовать rsync
для этого вида действия. Вдобавок к копированию файлов это может скопировать полномочия и улучшить скорость передачи по стандартному cp
.
Запаздывание /
на месте назначения крайне важно для Вашего требования.
Попробуйте что-то как:
rsync -aHSv /parentFolder/folder2 /parentFolder/folder1/
Можно использовать find
и xargs
, например:
find /var/spool/postfix/maildrop -user web2 -print0 -type f | xargs -0 -I{} mv {} /var/spool/postfix/temp-spam
Можно протестировать его путем вставки echo
:
find /var/spool/postfix/maildrop -user web2 -print0 -type f | xargs -0 -I{} echo mv {} /var/spool/postfix/temp-spam
можно также сделать это, не меча икру xargs
использование find
-exec
.
find /var/spool/postfix/maildrop -user THEUSER -type f -exec mv {} /var/spool/postfix/temp-spam \;
Если Вы хотите видеть, что файлы перемещены, можно добавить дополнительное -exec
к команде:
find /var/spool/postfix/maildrop -user THEUSER -type f -exec ls -lah {} \; -exec mv {} /var/spool/postfix/temp-spam \;
Стандартная команда find
позволяет Вам соответствовать файлам на основе метаданных (имя, полномочия, и т.д.) и действие на них. Это пересекает каталог рекурсивно. Базовый синтаксис find
сопровождаемый каталогом (каталогами) для пересечения, сопровождаемый критериями соответствия, дополнительно сопровождаемыми командой для выполнения (если Вы не указываете команду, find
печатает имена соответствия).
find /var/spool/postfix/maildrop -user web2 -exec mv -t /var/spool/postfix/temp-spam {} +
Это выполняет команду mv -t /var/spool/postfix/temp-spam …
для файлов соответствия: {}
заменяется списком всех файлов соответствия (если список является слишком длинным, find
выполнится mv
как много раз в нем берет).
-t
опция к mv
GNU (Linux/Cygwin) расширение. В системах, которые не имеют его, необходимо передать имена файлов для перемещения сначала, и затем место назначения. -exec … +
действие только позволяет передавать имена файлов в конце командной строки, таким образом, необходимо обратиться к другим методам.
find /var/spool/postfix/maildrop -user web2 -exec mv {} /var/spool/postfix/temp-spam \;
(вызовы mv
отдельно для каждого файла)
find /var/spool/postfix/maildrop -user web2 -exec sh -c 'mv "$@" "$0"' /var/spool/postfix/temp-spam {} +
(использует промежуточную оболочку для получения аргументов в желаемом порядке),
При использовании zsh можно использовать его спецификаторы шарика для выполнения того же задания как find
. Здесь, u
отметьте для соответствия файлам, принадлежавшим пользователю.
mv /var/spool/postfix/maildrop/*(u:web2:) /var/spool/postfix/temp-spam
(В отличие от этого, find
команды выше, это не рекурсивно вызывает в подкаталоги. Не необходимо здесь, но если Вы нуждаетесь в нем, вставляете **/
в пути для высказывания “нуля или большего количества подкаталогов”, например. /var/spool/postfix/maildrop/**/*(u:web2:)
.)