如何获取自动找到的所有子文件夹的逗号分隔文件列表?
How to get a comma separated list of files of all subfolders which are found automatically?
我想要一个包含各个子文件夹中所有文件的列表。
由于不断添加子文件夹,因此我需要自动更新子文件夹列表。
例如,我添加了子文件夹 html,pdf,md
。
#!/bin/zsh
# I get all the subfolders of the folder DIR automatically as a list.
folder=$(ls -l DIR/ | awk '/^d/ { print }' | tr '\n' ',' | sed 's/,$//g' )
echo "Folder: $folder"
# --> html,md,pdf
# Now get the files of the found subfolders
files=$(ls -m DIR/{$folder}/*)
echo "Files: $files"
# DOES NOT WORK
# this works instead:
ls -m DIR/{html,md,pdf}/*
在 ls
命令中手动输入子文件夹的名称可以正常工作。
我希望从 $files
得到的输出是(示例):
DIR/html/dataStorage.html, DIR/md/dataStorage.md, DIR/pdf/data.pdf, DIR/pdf/dataStorage.pdf
我正在使用 zsh
。
我找到了解决办法。自动找到所有子文件夹中的所有文件。无需先检查子文件夹。
files=$(ls -R DIR | awk '
/:$/&&f{s=[=10=];f=0}
/:$/&&!f{sub(/:$/,"");s=[=10=];f=1;next}
NF&&f{ print s"/"[=10=] }' | tr '\n' ',' | sed 's/,$//g' )
它基于 并稍作修改(管道连接到 tr
,最后使用 sed
)。
当你有适当的数组时,你不需要逗号分隔的列表(如果元素可以包含逗号,它就没有多大用处)。
使用大括号扩展创建三个单独的 glob 进行扩展
files=(DIR/*/*.{html,md,pdf})
或使用 KSHGLOB
选项创建一个 glob
setopt KSHGLOB
files=(DIR/*/*.@(html|md|pdf))
我想要一个包含各个子文件夹中所有文件的列表。 由于不断添加子文件夹,因此我需要自动更新子文件夹列表。
例如,我添加了子文件夹 html,pdf,md
。
#!/bin/zsh
# I get all the subfolders of the folder DIR automatically as a list.
folder=$(ls -l DIR/ | awk '/^d/ { print }' | tr '\n' ',' | sed 's/,$//g' )
echo "Folder: $folder"
# --> html,md,pdf
# Now get the files of the found subfolders
files=$(ls -m DIR/{$folder}/*)
echo "Files: $files"
# DOES NOT WORK
# this works instead:
ls -m DIR/{html,md,pdf}/*
在 ls
命令中手动输入子文件夹的名称可以正常工作。
我希望从 $files
得到的输出是(示例):
DIR/html/dataStorage.html, DIR/md/dataStorage.md, DIR/pdf/data.pdf, DIR/pdf/dataStorage.pdf
我正在使用 zsh
。
我找到了解决办法。自动找到所有子文件夹中的所有文件。无需先检查子文件夹。
files=$(ls -R DIR | awk '
/:$/&&f{s=[=10=];f=0}
/:$/&&!f{sub(/:$/,"");s=[=10=];f=1;next}
NF&&f{ print s"/"[=10=] }' | tr '\n' ',' | sed 's/,$//g' )
它基于 并稍作修改(管道连接到 tr
,最后使用 sed
)。
当你有适当的数组时,你不需要逗号分隔的列表(如果元素可以包含逗号,它就没有多大用处)。
使用大括号扩展创建三个单独的 glob 进行扩展
files=(DIR/*/*.{html,md,pdf})
或使用 KSHGLOB
选项创建一个 glob
setopt KSHGLOB
files=(DIR/*/*.@(html|md|pdf))