[英]How to list all the folder in a folder and exclude a specific one
假设我有一个这样的文件夹:
我的文件夹
====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[*]}]")
[说明]
find
命令的-printf
选项指定输出格式。 格式"\\"%f\\"\\0"
打印由双引号括起来并后跟 NUL 字符\\0
的文件名(不包括前导目录名)。-d ""
将分隔符指定为 NUL 字符,文件名在read
内置函数中再次拆分。ary
。echo "[${ary[*]}]"
命令打印出由IFS
分隔的ary
元素。 整个输出被方括号[]
包围。()
包围,要在子进程中执行。 目的只是不覆盖当前的IFS
。 如果您将我的答案中的脚本保存为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"
希望这可以帮助。
在 bash 中,这可以按如下方式完成,它很接近,但在一行中不起作用。
将内部字段分隔符更改为新行而不是空格。 这允许忽略目录名称中的空格。
然后执行以下操作:
迭代结果:
将所有内容通过管道传输到 xargs 以重新组合成一行并存储在 $var 中
IFS=$'\n'
var=`for d in \`ls -d1 */ | grep -v exclude_dir \`; do echo '\"'${d::-1}'\",' ; done | xargs`
echo '['${var::-1}']'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.