скрипт bash для вывода списка содержимого каталога через запятую - PullRequest
0 голосов
/ 13 ноября 2010

Мне нужен скрипт bash, который рекурсивно перечисляет файлы в каталоге следующим образом:

filename,size (in kb),numeric value (in filename)

Например:

/directory/1/file-100.txt,50,100
/directory/1/file-200.txt,45,200
/directory/2/file-100.txt,20,100
/directory/2/file-500.txt,100,500

Кроме того, он мне нужен, чтобы игнорировать запускаемые каталогис ".svn"

Ответы [ 3 ]

5 голосов
/ 13 ноября 2010

Попробуйте:

find -name ".svn" -prune -o -type f -printf "%p,%k,\n" | sed 's/\([^-]\+-\([0-9]\+\)\..*\)/\1\2/'

Используются только две утилиты (вероятно, требуются версии GNU).

2 голосов
/ 13 ноября 2010

может быть, не лучший способ, но должен работать:

find /path -type f | grep -v '.svn' | xargs du -k |\
  awk '{print $2","$1}' | sed 's/-\([0-9]*\)\(\..*\)/-\1\2,\1/'
0 голосов
/ 13 ноября 2010

Особенности:

  • Избегайте возможных дорогих обходов .svn-dirs.
  • Вместо 'du' * есть размер отчета "find"
  • Заставь awk творить больше магии, нет необходимости в sed.

Предложение по решению:

$ find . -path '*/.svn' -prune -o -type f -printf '%p %k\n' |\
  awk -v OFS=, '{ print $1, $2, gensub(/[^0-9]*([0-9]*)/, "\\1", "g", $1) }'

найти-опции:

  • -path ... Соответствие каталогов .svn
  • -prune Если match (-path) является каталогом, не спускаться.
  • -o ... или ...
  • -типа f Совпадают только файлы.
  • -printf ... Печать пользовательской строки, содержащей путь (% p) и размер в 1K-блоках (% k).

AWK:

Редактировать: Обновлено за предложение Денниса. Не могу поверить, что я пропустил% k на самом деле, я обвиняю 3 часа утра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...