Формат команды stat для добавления «/» к имени файла, если он находится в каталоге, и удаления «./» из начала

Формат команды stat для добавления «/» к имени файла, если он находится в каталоге, и удаления «./» из начала

С помощью следующей команды мне удалось вывести список всех каталогов относительно текущего каталога вместе с временем последнего изменения:

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

Связанный контент