Я хочу рекурсивно перечислить все файлы в данном каталоге, с их полным путем и их временными метками. Что-то вроде этого:
10:30 Dec 10 2010 /tmp/mydir/myfile
Я пробовал с:
find . -type f -exec ls -la {} \;
но это не дает мне полный путь.
Запустите ls
для каждого файла и отфильтруйте результат:
find "$PWD" -type f -exec ls -la {} \; | cut -d ' ' -f 6-
Выход:
Jun 14 00:02 /tmp/superuser.com/questions/370070/bar
Jun 14 20:24 /tmp/superuser.com/questions/228529/file with multiple spaces
Jan 2 1972 /tmp/superuser.com/questions/228529/old_file
Используйте -printf
:
find "$PWD" -type f -printf "%t %p\n"
Выход:
Thu Jun 14 00:02:47.0173429319 2012 /tmp/superuser.com/questions/370070/bar
Thu Jun 14 20:24:16.0947808489 2012 /tmp/superuser.com/questions/228529/file with multiple spaces
Sun Jan 2 03:04:05.0000000000 1972 /tmp/superuser.com/questions/228529/old_file
Запустите GNU stat
для каждого файла:
find "$PWD" -type f -exec stat --format '%y %n' {} \;
Выход:
2016-03-30 04:32:10.034718786 +0300 /etc/passwd
2015-12-21 19:30:07.854470768 +0200 /etc/group
Совет: если у вас есть GNU find, \;
можно заменить на \+
.
И еще один способ сделать это, если ваша находка не поддерживает printf
find . -type f | xargs ls -al | awk -v pwd="$PWD" '{ print $(NF-2), $(NF-1) , pwd substr($(NF), 2)}'
Примечание. Это работает только до тех пор, пока в именах файлов нет пробелов. Вывод выглядит так:
2010-09-29 22:08 /home/nifle/ac.txt
2010-10-04 16:02 /home/nifle/array.sh
2010-10-05 23:32 /home/nifle/b.txt
2010-12-15 16:49 /home/nifle/barcopy/subbar/ghut
2010-12-15 16:48 /home/nifle/bardir/subbar/ghut
2010-09-29 22:16 /home/nifle/foo.gz
2010-09-29 22:16 /home/nifle/foo1.gz
tree
- хорошая альтернатива:
tree -fD --timefmt %c
Отформатируйте время, используя синтаксис strftime .
Этот вопрос на StackOverflow играет с одной частью вашего вопроса. Чтобы получить то, что вы хотите, вы можете попробовать следующее:
find $ABSOLUTE_PATH_TO_DIR -ls