Как "прикоснуться" к файлам рекурсивно?
Мне нужно изменить временную метку около 5000 файлов.
Typing touch file1.txt
, touch file2.txt
примет меня навсегда.
Есть ли способ сделать что-то в соответствии с touch -R *
?
2 ответа
Решение
Ты можешь использовать find
Команда, чтобы найти все ваши файлы и выполнить touch
на каждый найденный файл, используя -exec
find -type f -exec touch {} +
Если вы хотите отфильтровать результаты только для текстового файла, вы можете использовать
find -type f -name "*.txt" -exec touch {} +
Ответ g_p делает временную метку «сейчас», но если, например, вы забыли параметр cp -p и вам нужно рекурсивно заменить временные метки их оригиналами, не копируя заново все файлы. Вот что сработало для меня:
find /Destination -exec bash -c 'touch -r "${0/Destination/Source}" "$0"' {} \;
Это предполагает дублирование дерева файлов/папок Source:/Source
и пункт назначения:/Destination
-
find
ищет в пункте назначения все файлы и каталоги (которым нужны временные метки) и-exec ... {}
запускает команду для каждого результата. -
bash -c ' ... '
выполняет команду оболочки, используя bash. -
$0
содержит результат поиска. -
touch -r {timestamped_file} {file_to_stamp}
использует команду замены bash${string/search/replace}
чтобы правильно установить источник временной метки. - каталоги источника и назначения указаны для обработки каталогов с пробелами.