Как получить список файлов в директории в скрипт?
Я пытаюсь получить содержимое каталога с помощью 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 возвращает как отдельный элемент, а затем вы проходите через него. Этот цикл создает временную переменнуюeachfileкоторый содержит один элемент переменной, через которую он проходит, в данном случае имя файла. Это не обязательно лучше, чем другие ответы, но я нахожу это интуитивно понятным, потому что я уже знаком сlsкоманда и синтаксис цикла for.
в версии Linux я работаю с (x86_64 GNU / Linux) следующие работы:
for entry in $search_dir/* do echo $entry done
Comments