printf '%s\n' conf{1..101} conf{2..272} |
xargs sh -c 'shift "$1"; printf "%s/distance.txt\n" "$@"' 2 1 > /path/to/folder.txt
Или,
printf '%s\n' conf{1..101}/distance.txt conf{2..272}/distance.txt |
xargs cat > /path/to/folder.txt
if [ ` ls -1 ~/$acl/sw-list-cisco > /dev/null | wc -l ` -gt 0 ];
Вы перенаправляете вывод ls
в /dev/null
, поэтому ничего не попадает в wc
, и всегда печатается 0
. То же самое, если вы попробуете это вручную: ls / >/dev/null | wc -l
против ls / | wc -l
.
Возможно, вы хотели вместо этого перенаправить errors из ls
в /dev/null
:
if [ $(ls ~/"$acl/sw-list-cisco" 2>/dev/null | wc -l) -gt 0 ];
(-1
is not требуется, когда вывод идет в канал.)
Но поскольку это всего лишь один файл, [ -f ~/"$acl/sw-list-cisco" ]
сделает это проще, чем @Кусалананда уже ответил. Даже если вам нужно подсчитать количество файлов, может быть лучше расширить глобус до массива и подсчитать элементы.
Вам редко, если вообще когда-либо, нужно анализировать вывод ls
.
В этом случае вы можете просто выполнить
if [ -f "$HOME/$acl/sw-list-cisco" ]; then
Я использую тест -f
, чтобы проверить, существует ли данное имя и является ли оно именем обычного файла. Я использую $HOME
, а не ~
, поскольку ~
не ведет себя как переменная внутри кавычек (и $HOME
ИМХО, гораздо информативнее).