我有一个Shell脚本,该脚本循环进入每个目录并找到一个文件。我的问题是shell脚本无法进入cd到包含空间的目录。这是示例脚本。
第一种方法:
for dir in "$(find /usr/tom/public/junk -maxdepth 3 -type f -name testfile)"; do
cd "$(dirname "$dir")"
printf "%-54s" $(basename $PWD)
done
第二种方法:
find "/usr/tom/public/junk" -maxdepth 3 -type f -name testfile -print |
while IFS= read -r dir
do
cd "$(dirname "$dir")"
printf "%-54s" $(basename $PWD)
done
错误:没有这样的文件或目录(因为某些目录包含空格)
我的要求是->当在目录中找到“测试”文件时,则必须删除该目录。
我正在ubuntu上运行此脚本,而奇怪的是,这段代码可以在Mac上运行,但不能在ubuntu服务器上运行。我不知道为什么它不能在ubuntu上工作。请帮我。
答案 0 :(得分:0)
可以使用/post/postId/#5d2775ecdd51be1858f6b753
处理read
的输出来避免目录名中存在空格的问题。 answer中对此有非常详尽的解释。对于您的情况,这样的方法会起作用:
find
答案 1 :(得分:0)
对目录名称使用双引号。
mahendra@test-Ubuntu:~$ cd /test
mahendra@test-Ubuntu:-Ubuntu:/opt$ cd "new test"
由于要连接的文件夹的名称中有空格,因此必须在名称两端加上引号,以使Shell能够正确读取(作为一个名称)。
现在,您需要检查如何将“”传递给shell脚本中的目录。
另一种方法是可以使用反斜杠
cd test\ Text\ 2/
反斜杠后跟一个空格,明确表示一个空格。
建议:在Linux中不要创建带有空格的目录。