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



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

584   6  

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 возвращает как отдельный элемент, а затем вы проходите через него. Этот цикл создает временную переменную eachfile который содержит один элемент переменной, через которую он проходит, в данном случае имя файла. Это не обязательно лучше, чем другие ответы, но я нахожу это интуитивно понятным, потому что я уже знаком с ls команда и синтаксис цикла for.

в версии Linux я работаю с (x86_64 GNU / Linux) следующие работы:

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

Comments

    Ничего не найдено.