С помощью следующей команды мне удалось вывести список всех каталогов относительно текущего каталога вместе с временем последнего изменения:
find . -exec stat -c '%n: %Y' {} \;
вывод выглядит примерно так:
.: 1569247414
./a_file.txt: 1561624333
./some_folder: 1561624645
./some_folder/some_file.txt: 1561624645
./some_folder/another_file.txt: 1536557809
Как мне избавиться от «./», появляющегося в начале каждой записи, и добавить «/», если это каталог?
В качестве бонуса было бы неплохо избавиться от первой записи «.», которая просто обозначает текущую папку.
Ваше здоровье
решение1
- Добавьте
-mindepth 1
, чтобы избавиться от.
того, что имеет глубину == 0 - Альтернатива: использовать
find *
вместоfind .
- Отделите файлы от папок с помощью
-type d ... -or -type f ...
- Используйте
+
вместо\;
для отправки нескольких файлов наstat
; он справится с этим и будет работать намного быстрее!
find * \
-type d -exec stat -c '%n/: %Y' {} + \
-or -type f -exec stat -c '%n: %Y' {} +
НО...
-exec stat
Вам это вообще не нужно !
- Используйте
find
команду s-printf
для вывода даты последнего изменения (%Cs
это будет эквивалентноstat
's%Y
). -printf '%P'
вместо%p
также позволит вам избавиться от./
в начале каждого имени файла.
find . -mindepth 1 \
-type d -printf '%P/: %Cs\n' \
-or -type f -printf '%P: %Cs\n'
Выход:
a_file.txt: 1561624333
some_folder/: 1561624645
some_folder/some_file.txt: 1561624645
some_folder/another_file.txt: 1536557809