Как к CP или файлам комнаты на основе владения / разрешение

Я предпочитаю использовать rsync для этого вида действия. Вдобавок к копированию файлов это может скопировать полномочия и улучшить скорость передачи по стандартному cp.

Запаздывание / на месте назначения крайне важно для Вашего требования.

Попробуйте что-то как:

rsync -aHSv /parentFolder/folder2 /parentFolder/folder1/
2
05.02.2013, 23:19
3 ответа

Можно использовать 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
2
27.01.2020, 22:01
  • 1
    Ничего себе - образцовый ответ! Огромное спасибо. Если я мог бы проголосовать за Вас 10 затем, я был бы. (К сожалению, я не могу даже проголосовать за Вас 1 как мой представитель в настоящее время слишком низко...) –  hazymat 05.02.2013, 12:06

можно также сделать это, не меча икру 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 \;
2
27.01.2020, 22:01

Стандартная команда 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:).)

0
27.01.2020, 22:01

Теги

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