Есть ли способ получить путь / к / файл с ls + awk, sed, grep или подобные инструменты?
Вопрос
Я хотел бы рекурсивно найти каталог, а вывод:
Имя файла Дата Путь Размер
У меня все, кроме Пушки ... Что такое $$$$ BUSTER ....
Вот мою команду до сих пор:
ls -lThR {DIRECTORY_NAME_HERE} | awk '/^-/ {print $10 " " $6 " " $7 " " $8 " " $5}'
Я бы хотел, чтобы был способ объединить эту команду с:
find ./{DIRECTORY_NAME_HERE} -type f
который просто показывает / путь / к / имя файла самого ... нет других метаданных afaik.
Любые идеи ... Надеюсь, не требуя языка программирования?
РЕДАКТИРОВАТЬ: Вот точный выход, который я искал при условии, что файл 5 байтов:
myfile.txt 2 10:58 / Путь 5
ОБНОВИТЬ: Вот команда, с которой я завел:
find ./{DIRECTORY_NAME_HERE} -type f -ls |
while read f1 blocks perms blocks owner group size mon day third file;
do echo `basename $file` `ls -lrt $file | tr -s " " | cut -d" " -f6-8` `dirname $file` `ls -lrt $file | tr -s " " | cut -d" " -f-5`; done
Если кто-то может его улучшить, это было бы здорово, но это работает ...
Решение
Ты пробовал find ./delete -type f -ls
(Обратите внимание -ls
- Это ключ :-))? Вы должны иметь возможность проводить результаты через awk
Чтобы отфильтровать поля, которые вы хотите.
Редактировать...Еще один способ сделать это, это с циклом, например, в то время как:
find ./delete -type f -ls | while read f1 blocks perms blocks owner group size mon day third file
do
echo `basename $file` `dirname $file`
done
и добавьте биты, которые вам нужны в этом.
Другие советы
Вы также можете использовать функцию «Найти», чтобы показать только правильные свойства файла, который вы хотите:
find {DIRECTORY_NAME_HERE} -type f -printf '%f %Tb %Td %TH:%TM %h %s\n'
Я получаю такие результаты:
config Nov 10 10:02 /etc/w3m 1185
mailcap Nov 10 10:02 /etc/w3m 44
hosts.allow Apr 29 05:25 /etc 580
rsyslog.conf Feb 24 10:26 /etc 1217
user-dirs.conf Apr 16 15:03 /etc/xdg 414
user-dirs.defaults Apr 16 15:03 /etc/xdg 418
Я бы использовал Perl для этой задачи:
#!/opt/local/bin/perl -w
use File::Find;
use POSIX qw(strftime);
find(\&wanted, ($DIRECTORY_NAME_HERE));
sub wanted {
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime) = stat;
printf("%s %s %s %d\n", $_,
strftime("%b %e %H:%M %Y", localtime($mtime)),
$File::Find::dir,
$size);
}