假设我有一个像这样的文件夹:
我的文件夹
====my_sub_folder_1
====my_sub_folder_2
====my_sub_folder_3
====排除
我想要一个返回如下字符串的命令:
["my_sub_folder_1", "my_dub_folder_2", "my_dub_folder_3"]
(注意排除了 excude 文件夹)
我能做到的最好的是:
ls -dxm */
返回以下内容。
my_sub_folder_1/, my_dub_folder_2/, my_dub_folder_3/
所以我仍在尝试删除每个文件夹末尾的/,添加 [] 和“”。
如果可能的话,我想在一行中执行此操作,以便我可以直接放入 shell 变量,否则我会将其放入 .sh 文件中,该文件将返回我正在尝试构建的字符串。 (我不知道最后一部分是否真的可能)。
最佳答案
假设您正在 my_folder
所在的目录中执行脚本
属于,怎么样:
while IFS= read -r -d "" f; do
ary+=("$f")
done < <(find "my_folder" -maxdepth 1 -mindepth 1 -type d -not -name "exclude" -printf "\"%f\"\0")
(IFS=","; echo "[${ary[*]}]")
[说明]
-printf
选项指定输出格式。格式"\"%f\"\0"
打印由以下内容包裹的文件名(不包括主目录名称) 双引号,后跟 NUL 字符\0
。- NUL 字符用作文件名分隔符和文件名
通过指定分隔符在内置的
read
中再次分割 使用-d ""
转换为 NUL 字符。 - 然后文件名(带双引号)存储在数组
ary
中 一一。 - 最后
echo "[${ary[*]}]"
命令打印出ary
的元素 由IFS
分隔。整个输出由方括号[]
包围。 - 最后一行由括号
()
包围,在子进程中执行。 目的只是不覆盖当前的IFS
。
find
命令的如果您将我的答案中的脚本保存为 my_script.sh
,那么您可以分配
将变量 MY_VAR
添加到输出:
MY_VAR=$(./my_script.sh)
echo "$MY_VAR"
# or another_command "$MY_VAR" or whatever
或者,您可以通过修改在脚本内分配变量 最后一行为:
MY_VAR=$(IFS=","; echo "[${ary[*]}]")
echo "$MY_VAR"
希望这有帮助。
关于linux - 如何列出文件夹中的所有文件夹并排除特定文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59605601/