Я хотел отобразить размер каждого файла в текущем рабочем каталоге по одному, и я записал этот сценарий
for $filename in "/etc/passwd";$filesize=$(stat --format=%s "$filename");echo $filesize.
Но я получаю это сообщение об ошибке
-bash: syntax error near unexpected token `$filesize=$(stat --format=%s "$filename")'
В Вашем сценарии существует много ошибок
переменное присвоение var=value
нет $var=value
a for
циклу нужен a do
и a done
Так
for filename in "/etc/passwd"; do
filesize=$(stat --format=%s "$filename");
echo $filesize
done
Но отметьте это "/etc/passwd"
не "текущий рабочий каталог" - это - единственный файл. Если бы Вы действительно хотите циклично выполниться по файлам в текущем каталоге, это было бы
for filename in * . . .
Обратите внимание, что, если количество файлов не является очень большим, Вы могли опустить цикл в целом и просто сделать
stat --format=%s *
Кроме того,
find . -maxdepth 1 -printf '%s\n'
Еще одно решение с использованием ls
будет следующим:
ls -l |
while read f1 f2 f3 f4 f5 f6 f7 f8 f9
do
echo "The size of $f9 is:"
echo "$f5"
done
Дополнительную информацию см. в этом ответе.
Примечание:
В некоторых случаях анализа вывода ls
лучше избегать.