1
我正在尝试查找模式中的所有路径,并且卡住了。这是目录Shell脚本:识别模式中的所有路径
testdir
|-- dir with spaces
| |-- subdir
| | |
| | |-subfile.sh
| |
| +-- 1.sh
| |
| +-- 2.sh
|
+-- dir1
| |
| |
| +-- file.sh
|
+-- test.sh
这种的结构的路径模式,我有testdir/**/*
我想
什么,我试图让输出是
-flag testdir/dir\ with\ spaces/1.sh
-flag testdir/dir\ with\ spaces/2.sh
-flag testdir/dir\ with\ spaces/subdir
-flag testdir/dir\ with\ spaces/subdir/subfile.sh
-flag testdir/dir1
-flag testdir/dir1/file.sh
-flag testdir/test.sh
我试过
pathpattern=testdir/**/*
echo $pathpattern
它打印出以下
testdir/dir with spaces/1.sh testdir/dir with spaces/2.sh testdir/dir with spaces/subdir testdir/dir1/file.sh
- 我想这样做的路径模式的回声,但它没有返回的一切。
- 我也不知道处理有空间的条目。我尝试循环遍历$ pathpattern,但未能区分新路径和有空间的路径。
感谢您抽出时间来对此作出回应。第一个打印选项给我错误“printf:-f:无效选项”。我已经尝试了第二种选择 - 它将具有空格的路径分成两个结果。对于你为什么我需要这个问题 - 我试图为我们正在使用的API之一指定排除路径。输入规范使用路径模式来确定要排除的路径。 – Subbu
我编辑了解决'printf'错误的答案;对于那个很抱歉。你对'for'循环失败的描述听起来像是你没有在循环内引用循环变量的双引号。 – tripleee
类似于'api --call --options $(printf - “-flag%q”) - 更多的选项'可能会让你无法将结果保存在一个始终讨厌的变量中。如果你不能再这样做,我建议使用一个数组。有关于此的常见问题;见http://mywiki.wooledge.org/BashFAQ/050 – tripleee