Есть ли способ получить путь / файл / с помощью ls + awk, sed, grep или аналогичных инструментов? - PullRequest
0 голосов
/ 04 декабря 2010

Я бы хотел рекурсивно найти каталог и вывести:

Имя файла Дата Путь Размер

У меня есть все, кроме Пути ... который обанкротился ...

Вот моя команда:

ls -lThR {DIRECTORY_NAME_HERE} | awk '/^-/ {print $10 " " $6 " " $7 " " $8 " " $5}'

Хотелось бы, чтобы был способ объединить эту команду с:

find ./{DIRECTORY_NAME_HERE} -type f 

, который просто показывает / path / to / filename непосредственно ... никаких других метаданных 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

Если кто-то может улучшить его, это было бы здорово, но это работает ...

Ответы [ 3 ]

3 голосов
/ 04 декабря 2010

Вы пробовали find ./delete -type f -ls (обратите внимание на -ls - это ключ :-))? После этого вы сможете передать результаты через awk, чтобы отфильтровать нужные вам поля.

Редактировать ... Другой способ сделать это можно с помощью цикла while, например ::100100

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

и добавьте в него нужные биты.

2 голосов
/ 04 декабря 2010

Вы также можете использовать функцию -printf в find, чтобы показать только нужные свойства файла, который вы хотите:

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
1 голос
/ 04 декабря 2010

Я бы использовал 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);
}
...