Как получить список файлов в директории в скрипт?

Я пытаюсь получить содержимое каталога с помощью 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 ответов


for entry in "$search_dir"/*
do
  echo "$entry"
done

другие ответы здесь велики и отвечают на ваш вопрос, но это лучший результат 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 будет делать текущий каталог.


for entry in "$search_dir"/* "$work_dir"/*
do
  if [ -f "$entry" ];then
    echo "$entry"
  fi
done

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