Я столкнулся с проблемой запуска каталога с базовым сценарием.
for item in *
do
if [ -d $item ]
then
echo $item
fi
done
Результат:
Я думаю, что -d находит какую-то проблему с исходной строчной буквой? Может кто-нибудь объяснить, почему это происходит? Заранее большое спасибо.
Некоторые каталоги / файлы могут содержать пробелы в своих именах, это может привести к получаемой вами ошибке. Поэтому используйте кавычки:
for item in *
do
if [ -d "$item" ]
then
echo "$item"
fi
done
, если вы хотите, чтобы они были отсортированы в алфавитном порядке, используйте
for item in *
do
if [ -d "$item" ]
then
echo "$item"
fi
done | sort
. В качестве примера проблемы предположим, что файл называется My File
. Если вы не используете кавычки, вы получите (после расширения bash)
if [ -d My File ]
, так что это похоже на «Тест: My
каталог? Do File
», но File
нет действительный оператор test
, таким образом, ошибка.
Следующее повторяет все каталоги в текущем каталоге (но не пунктирные, например .git
)
#!/bin/bash
find . -maxdepth 1 -mindepth 1 -type d | while read Directory; do
echo "$Directory";
done