Можно ли попытаться делать второй шаг, не делая nc? Это - делают VNC только с-L и-R. Я полагаю, что проблема - то, что Ваша netcat сессия уже соединяется назад с открытый. Таким образом, когда выполнение материала VNC не использует netcat.
Здесь есть кое-что с 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
(обратите внимание на одиночные кавычки вокруг шаблона, чтобы оболочка не расширяла оператор глобуса *
).
А как же..:
ls -lrth yourfile|awk '{print $6 $7 " " $8 system("wc -l " $9) }' | tr '\n' ' '
Я использовал 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
. Я использовал 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 {})" '
Решения, основанные на 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}'
Конечно, эта команда выведет сообщение об ошибке для последней строки, но это достаточно легко исправить. Или игнорировать.)