Так и должно быть:
! cat /data/files/*.txt >> mergedfile.txt && wc -l /data/files/mergedfile.txt
Ваши команды состоят из двух команд -первый — cat
, который выводит в текстовый файл путем перенаправления -второй — вычислить длину результирующего файла
Эти две команды должны выполняться последовательно при условии, что первая успешно выполнена. Итак, вы используете &&
для цепочки. После перенаправления stdout
из cat
на mergedfile.txt
команда cat
не создает stdout
для трубопровода на wc
. Поэтому использовать |
неправильно.
В качестве альтернативы вы можете:
! cat /data/files/*.txt | wc -l
, который является более кратким и позволяет избежать использования временного файла. Здесь вывод cat
отправляется в wc
для непосредственного подсчета.
Обратите внимание , первый подход с использованием временного файла имеет много недостатков:
mergedfile.txt
перед его выполнением. Если вы начали без этого файла в своем рабочем каталоге, это нормально. Но очень часто вы пробовали некоторые команды (, например не ту, которую вы использовали сначала ), а затем забывали очистить временный файл и запустить правильную команду. Это все равно приведет к неправильному ответу. Действительно, если все строки находятся в /data/files/*.txt
, вы можете просто использовать >
вместо >>
. Сначала он очистит файл. Кроме того :, если вам нужно mergedfile.txt
для последующего использования, вы можете использовать tee
, чтобы сделать копию вывода:
! cat /data/files/*.txt | tee mergedfile.txt | wc -l
где tee
помещает свой stdin
в mergedfile.txt
и дублирует его в stdout
.
Прочитать man find
.
Что-то вроде:
find. -type f -name '*.999.jpg' -delete
поможет.
При первой работе с таким использованием find
опустите -delete
, поэтому find
просто перечислит найденные файлы.