Как "прикоснуться" к файлам рекурсивно?

Мне нужно изменить временную метку около 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

  1. findищет в пункте назначения все файлы и каталоги (которым нужны временные метки) и-exec ... {}запускает команду для каждого результата.
  2. bash -c ' ... 'выполняет команду оболочки, используя bash.
  3. $0содержит результат поиска.
  4. touch -r {timestamped_file} {file_to_stamp}использует команду замены bash${string/search/replace}чтобы правильно установить источник временной метки.
  5. каталоги источника и назначения указаны для обработки каталогов с пробелами.
Другие вопросы по тегам