эта команда работает, но когда я использую ее в цикле for, она не работает

  • Вам следует создать разделы на всех новых дисках с помощью утилиты fdisk или gdisk.

- затем отформатируйте их с помощью команды mkfs (например, mkfs -t ext4 / dev / disk1).

  • затем смонтируйте их с помощью команды mount (например, mount -t ext4 / dev / disk1 / mnt / mount).

  • Наконец, убедитесь, что вы добавили записи о новых дисках в файл / etc / fstab, чтобы они автоматически монтировались при перезагрузке.

1
10.05.2017, 16:18
1 ответ
for f in./*; do ls./* | wc -l $f; done

Это устанавливает fдля всех имен файлов в текущем каталоге(./*)по очереди. Для каждого из них он снова запускает lsсо всеми именами файлов в текущем каталоге, направляя вывод в wc -l $f. Теперь wc -lподсчитывает строки в файлах, переданных в качестве аргументов, и смотрит на стандартный ввод только в том случае, если их нет. Таким образом, канал здесь игнорируется wcи пытается прочитать любой файл, названный в f, терпя неудачу, если это каталог.

Я подозреваю, что вы хотите что-то вроде этого

for f in./* ; do ls "$f" | wc -l ; done

Который запустит lsв каталоге, указанном в f, а затем подсчитает строки в нем. Но lsможет игнорировать файлы, имена которых начинаются с точки(ls -Aтакже перечисляет их, пропуская .и ..),и глобус также может соответствовать обычным файлам (, если они есть в этом основном каталоге ).

Но вам вообще не нужны lsили wc. OS X должен иметь Bash, где это должно работать:

shopt -s dotglob       # '*' matches files with a leading dot, too
for f in./*/ ; do     # trailing slash only picks directories
    set -- "$f"/*      # fill the positional params with the filenames in the dir 
    echo "$f $#"       # print the directory name and number of params/files
done
2
27.01.2020, 23:33

Теги

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