【问题标题】:deal with filename with space in shell [duplicate]在shell中处理带有空格的文件名[重复]
【发布时间】:2019-07-16 06:40:24
【问题描述】:

我在这里阅读了answer,但仍然有错误。 在我的文件夹中,我只想处理*.gz 文件,Windows 10.tar.gz 文件名中有空间。

假设文件夹包含:

Windows 10.tar.gz Windows7.tar.gz otherfile

这是我的shell脚本,我尝试了所有用“”引用的东西,仍然无法得到我想要的。 crypt_import_xml.sh

#/bin/sh

rule_dir=/root/demo/rule
function crypt_import_xml()
{
    rule=$1
    # list the file in absoulte path
    for file in `ls ${rule}/*.gz`; do
        echo "${file}"
        #tar -xf *.gz

        #mv a b.xml to ab.xml

    done
}

crypt_import_xml ${rule_dir}

这是我得到的:

root@localhost.localdomain:[/root/demo]./crypt_import_xml.sh 
/root/demo/rule/Windows
10.tar.gz
/root/demo/rule/Windows7.tar.gz

tar xf *.gz 文件后,xml 文件名仍然包含空格。处理文件名包含空格对我来说是一场噩梦。

【问题讨论】:

  • 您可以使用:for file in "${rule}"/*.gz; do echo "${file}" #tar -xf *.gz #mv a b.xml to ab.xml done 并告诉我它是否有效吗?你首先不需要ls 命令
  • @Allan 使用 ls 命令仍然得到相同的结果。
  • 不应有任何ls 命令
  • (OT: @J.Doe 你的代码有一些问题(坏掉的 shebang,function 是一个 bashism 等),我可以推荐shellcheck.net 吗?)

标签: linux bash shell unix


【解决方案1】:

您无需在 for 循环中调用 ls 命令,文件通配将在您的 shell 中进行,无需运行此附加命令:

XXX-macbookpro:testDir XXX$ ls -ltra
total 0
drwx------+ 123 XXX  XXX  3936 Feb 22 17:15 ..
-rw-r--r--    1 XXX  XXX     0 Feb 22 17:15 abc 123
drwxr-xr-x    3 XXX  XXX    96 Feb 22 17:15 .
XXX-macbookpro:testDir XXX$ rule=.
XXX-macbookpro:testDir XXX$ for f in "${rule}"/*; do echo "$f"; done
./abc 123

在您的情况下,您可以将"${rule}"/* 更改为:

"${rule}"/*.gz;

【讨论】:

  • 不能工作,不换目录还是出错。
【解决方案2】:

您不应该在for 循环中使用ls

$ ls directory 
file.txt  'file with more spaces.txt'  'file with spaces.txt'

使用ls

$ for file in `ls ./directory`; do echo "$file"; done
file.txt
file
with
more
spaces.txt
file
with
spaces.txt

使用文件通配符:

$ for file in ./directory/*; do echo "$file"; done 
./directory/file.txt
./directory/file with more spaces.txt
./directory/file with spaces.txt

所以:

for file in "$rule"/*.gz; do
    echo "$file"
    #tar -xf *.gz

    #mv a b.xml to ab.xml
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多