Shell脚本无法CD进入包含空格的目录

时间:2019-07-12 07:09:08

标签: linux shell

我有一个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上工作。请帮我。

2 个答案:

答案 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中不要创建带有空格的目录。