Файлы списка с количеством строки и датой

Можно ли попытаться делать второй шаг, не делая nc? Это - делают VNC только с-L и-R. Я полагаю, что проблема - то, что Ваша netcat сессия уже соединяется назад с открытый. Таким образом, когда выполнение материала VNC не использует netcat.

5
31.10.2014, 01:30
5 ответов

Здесь есть кое-что с find + wc + date.

find . -maxdepth 1 -exec sh -c '[ -f "$0" ] && \
  printf "%6s\t\t%s\t%s\n" "$(wc -l<"$0")" "$(date -r "$0")" "$0"' {} \;

Вместо даты -r можно также использовать, например, stat -c%y.

Вывод выглядит следующим образом:

   394      Thu Oct 16 22:38:14 UTC 2014    ./.zshrc
     7      Thu Oct 30 11:19:01 UTC 2014    ./tmp.txt
     2      Thu Oct 30 06:02:00 UTC 2014    ./tmp2.txt
    40      Thu Oct 30 04:16:30 UTC 2014    ./pp.txt

Используя это в качестве отправной точки, можно создать функцию, которая принимает каталог и шаблон в качестве параметров:

myls () { find "$1" -maxdepth 1 -name "$2" -exec sh -c '[ -f "$0" ] && \
  printf "%6s \t\t%s\t%s\n" "$(wc -l<"$0")" "$(date -r "$0")" "$0"' {} \;; }

После этого myls /tmp '*.png' перечислит только образы из /tmp (обратите внимание на одиночные кавычки вокруг шаблона, чтобы оболочка не расширяла оператор глобуса *).

7
27.01.2020, 20:36

А как же..:

ls -lrth yourfile|awk '{print $6 $7 " " $8 system("wc -l " $9) }' | tr '\n' ' '
-1
27.01.2020, 20:36

Я использовал awk, как показано ниже:

wc -l * | head --lines=-1 | while read num file
do
  echo -n $num" "
  ls -l $file | awk '{
     for (i=6; i <= NF; i++)
       printf $i " "
  }'
  echo
done
  • head используется для удаления последней строки (общая строка выхода wc). Номер
  • номер содержит номер строки файла .
  • awk используется для вывода времени из вывода ls -l.
0
27.01.2020, 20:36

Я использовал xargs с find :

find . -type f | xargs -i  sh -c 'echo -n `date -r {}`; \
     echo -n "    "; echo -n `wc -l {}`; echo '

Выход:

Thu Oct 30 19:16:38 IST 2014    0 ./b
Thu Oct 30 19:16:38 IST 2014    0 ./a
Thu Oct 30 19:16:38 IST 2014    0 ./c
Thu Oct 30 19:16:56 IST 2014    10 ./testfile

Немного форматирования с помощью printf вместо echo, как @jimmij:

find . -type f | xargs -i sh -c 'printf "%s\t%s\t\n" \
     "$(date -r {} +%x\ %H:%M:%S)" "$(wc -l {})" '
0
27.01.2020, 20:36

Решения, основанные на find- выглядят наиболее элегантно, но просто для прикола здесь есть пара других способов атаки на это.

Этот способ использует sed и head для очистки вывода wc, затем использует join, чтобы объединить его с выводом stat, используя имя файла в качестве поля join.

pat="A*"; join -1 2 -2 1 -t ' ' ' <(wc -l $pat|head -n-1|sed 's/^[ ]*//') <(stat -c '%n %y' $pat) | awk '{printf "%-20s %6s %s %s %s %s\n",$1,$2,$3,$4, $5}'

И более простая, использующая вставку , при этом awk снова приводит в порядок колонки, а также проверяет, совпадают ли имена файлов.

pat="A*";paste -d ' ' <(wc -l $pat) <(stat -c '%n %y' $pat) | awk '$2==$3{printf "%6s %s %s %s %s\n", $1, $4, $5, $2}'

Однако, если имена не совпадают (IOW списки файлов меняются во время выполнения этой команды), то ошибки невидимы. Но эта версия сообщает об ошибках:

pat="A*";вставьте -d ' ' <(wc -l $pat) <(stat -c '%n %y' $pat) | awk '$2==$3{printf "%6s %s %s %s %s\n", $1, $4, $5, $2;next};{print "Error:" $0}'

Конечно, эта команда выведет сообщение об ошибке для последней строки, но это достаточно легко исправить. Или игнорировать.)

2
27.01.2020, 20:36

Теги

Похожие вопросы