найти и скопировать файлы и каталоги - PullRequest
1 голос
/ 01 февраля 2020

Я пытаюсь создать сценарий bash, который будет копировать файлы, созданные или модифицированные за последние 24 часа. Я знаю, что это не новый вопрос, но я не могу найти ответы, которые могут мне помочь. Итак, у меня есть dir test (все файлы / dir из них созданы за последние 24 часа).

test/
    file1.txt
    file2.txt
    dir/
             file.txt

Как я могу скопировать их в таком формате:

backup/
      file1.txt
      file2.txt
      dir/
               file.txt

Потому что, если я использую find test -type f -ctime -1 -exec cp -r {} backup \;

backup/
      file.txt
      file1.txt
      file2.txt

или find test -exec -ctime -1 cp -r {} backup \;:

backup/
    file.txt
    file1.txt
    file2.txt
    test/
             file1.txt
             file2.txt
             dir/
                      file.txt
    dir/
             file.txt

1 Ответ

1 голос
/ 01 февраля 2020

Немного хаки sh и, вероятно, медленный из-за bash, но это должно сработать:

find test -type f -mtime -1 -exec bash -c '
    src=("$@")
    dst=("${@/#test/backup}")
    mkdir -p "${dst[@]%/*}"
    for i in "${!src[@]}"; do
        cp "${src[i]}" "${dst[i]}"
    done
' _ {} +

_ в конце является заполнителем для $0 (вы знаете, $@ расширяется до $1, $2, ...).

Для dry -запускаемой вставки echo перед mkdir и cp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...