Как "прикоснуться" к файлам рекурсивно?
Мне нужно изменить временную метку около 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}чтобы правильно установить источник временной метки. - каталоги источника и назначения указаны для обработки каталогов с пробелами.