Как получить список файлов в директории в скрипт?
Я пытаюсь получить содержимое каталога с помощью shell-скрипт.
мой скрипт:
for entry in `ls $search_dir`; do
echo $entry
done
здесь $search_dir
- относительный путь. Однако,$search_dir
содержит много файлов с пробелами в именах. В этом случае этот сценарий не выполняется должным образом.
Я знаю, что мог бы использовать for entry in *
, но это будет работать только для моего текущего каталога.
Я знаю, что я могу перейти в этот каталог, используйте for entry in *
затем изменить обратно, но мое особое ситуация мешает мне сделать это.
у меня есть два относительных путей $search_dir
и $work_dir
, и я должен работать на обоих одновременно, читая их создание/удаление файлов и т. д.
так что мне теперь делать?
PS: я использую bash.
6 ответов
другие ответы здесь велики и отвечают на ваш вопрос, но это лучший результат google для "bash get list of files in directory" (который я искал, чтобы сохранить список файлов), поэтому я думал, что опубликую ответ на эту проблему:
ls $search_path > filename.txt
Если вы хотите только определенного типа (например .txt-файлы):
ls $search_path | grep *.txt > filename.txt
обратите внимание, что $search_path является необязательным; ls > filename.txt будет делать текущий каталог.
find "${search_dir}" "${work_dir}" -mindepth 1 -maxdepth 1 -type f -print0 | xargs -0 -I {} echo "{}"
это способ сделать это, где синтаксис проще для меня понять:
yourfilenames=`ls ./*.txt`
for eachfile in $yourfilenames
do
echo $eachfile
done
./
является текущим рабочим каталогом, но может быть заменен любым путем*.txt
ничего не возвращает.txt
Вы можете проверить, что будет перечислено легко, введя ls
команда прямо в терминал.
в основном, вы создаете переменную yourfilenames
содержит все, что команда list возвращает как отдельный элемент,а затем вы проходите через него. Этот loop создает временную переменную eachfile
который содержит один элемент переменной, через которую он проходит, в данном случае имя файла. Это не обязательно лучше, чем другие ответы, но я нахожу это интуитивно понятным, потому что я уже знаком с ls
команда и синтаксис цикла for.
в версии Linux я работаю с (x86_64 GNU/Linux) следующими работами:
for entry in $search_dir/*
do
echo $entry
done