Я хочу получить все файлы в каталоге, но не в любых подкаталогах в этом каталоге. Пока я использую;Получить файлы в каталоге, но не подкаталог
file=(path/to/my/files/*)
for f in ${files[@]}; do ...
Я хочу получить все файлы в каталоге, но не в любых подкаталогах в этом каталоге. Пока я использую;Получить файлы в каталоге, но не подкаталог
file=(path/to/my/files/*)
for f in ${files[@]}; do ...
Надлежащих безошибочный способ делать он использует GNU
найти что-то вроде
#!/bin/bash
while IFS= read -r -d '' file; do
# Your script/command(s) goes here
done < <(find . -maxdepth 1 -mindepth 1 -type f -print0)
man find
говорит следующее о -mindepth
и -maxdepth
полей
-maxdepth levels
Descend at most levels (a non-negative integer) levels of directories below the command line arguments. -maxdepth 0
means only apply the tests and actions to the command line arguments.
-mindepth levels
Do not apply any tests or actions at levels less than levels (a non-negative integer). -mindepth 1 means process all files except the command line arguments.
Так в идеале -mindepth 1
и -maxdepth 1
не будет выходить за рамки поиска файлов на более чем одном уровне т.е. предельному в текущем каталоге. Флаг -print0
выполняет обработку файлов со специальными символами.
Пропустить подкаталоги внутри цикла:
for file in path/to/my/files/*; do
[[ -d $file ]] && continue
# do other stuff here
done
Это не удивительно эффективное, но вы можете создать массив файлов, как это:
files=()
for file in path/to/my/files/*; do
[[ -d $file ]] || files+=("$file")
done
Сделайте свою домашнюю работу, прежде чем спрашивать :)
Если вы хотите получить только файлы, это так же просто, как:
find <directory_name> -maxdepth 1 -type f
Если вы хотите, чтобы получить каталоги в директории (только 1 уровень:
find <directory_name> -maxdepth 1 -type d
вы получите точку
в Баш скрипт (спасибо @chepner для его примечания):
#!/bin/bash
find . -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
echo "$file"
done
Вы пытались использовать 'find'? – Inian
Может быть, в какой-то день 'bash' получит классификаторы glob' zsh': 'files = (путь/to/my/files/* (.))'. – chepner