Рейтинг:0

Копировать файлы по дате со структурой каталогов

флаг lk

Я похвалил:

find /source/ -type f -newermt '18 декабря 2020' -exec cp -t /target/ {} +

Эта команда копирует только файлы без структуры каталогов, но мне нужны файлы с его родительским каталогом.

Во-вторых, почему дата файлов меняется, когда я их копирую? Можно ли не менять дату изменения файла, когда я их копирую?

Рейтинг:3
флаг es

Здесь --preserve=все возможность ср; видеть человек КП.

Но я рекомендую использовать rsync вместо ср; он гораздо более универсален, и его легко заставить сохранять временные метки и копировать только новые файлы. У него есть некоторая кривая обучения со всеми теми опциями, которые он поддерживает, но стоит погрузиться в это.

Обычный вариант использования выглядит примерно так:

rsync -n -av /some/where/sourcedir .

Это рекурсивно воспроизводит исходный каталог в текущий каталог как подкаталог исходный каталог/. Это не коснется файлов, которые уже есть и имеют ту же метку времени/содержимое. опция означает, что это просто пробный прогон, поэтому вы можете увидеть, что он будет делать (вместе с -v за подробный). Как только вы будете довольны тем, что он будет делать, запустите его без :

rsync -av /some/where/sourcedir .

Вы можете вызывать это неоднократно; если он больше ничего не делает, с ним действительно покончено.

Вы также можете удалять файлы, которые больше не находятся в исходном дереве каталогов с --удалять:

rsync -av --delete /some/where/sourcedir .

Если вы добавите косую черту к исходному пути, это не создаст исходный каталог/ подкаталог в месте назначения, но копирует его непосредственно в этот подкаталог. Вместе с --удалять, он создает копию этого дерева 1:1 в текущем каталоге, а также удаление все, чего нет в исходном поддереве:

rsync -av --delete /some/where/sourcedir/ .

Опять же, добавьте посмотреть, что это бы делать. В общем, я настоятельно рекомендую всегда использовать сначала, чтобы подтвердить, что он будет делать то, что вы хотите.

Есть множество других вариантов (например, --исключить=); видеть человек rsync.

Рейтинг:0
флаг cn

Вы можете выполнить это с помощью найти и либо ср с --родители, что требует существования ../target.

(встроенный источник компакт-дисков; найти -тип f \
  -newermt '18 декабря 2020' -exec cp --parents -at ../target {} +)

Второй вариант использует cpio что более производительно. В то время как в предыдущем примере используется CD удалить отправная точка перед копированием мы делаем это с помощью -printf директива и cpio -D. И для этого не потребуется существующая цель перед копированием.

найти источник/ -mindepth 1 -depth -type f \
  -newermt '18 декабря 2020' -printf %P\0 | cpio -0 -pvdm -D источник/ цель

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.