Bash - 用特定文件替换目标文件,目录名称中有空格

时间:2010-05-09 17:06:03

标签: bash replace directory whitespace

我有一个大型文件目录树,并使用以下脚本列出并用特定文件替换搜索到的名称。问题是,我不知道如何正确编写createList()for循环来解释目录名中的空格。如果所有目录都没有空格,那么它可以正常工作。

输出是文件列表,然后是“cp”命令列表,但报告带有空格的目录作为单独的目录。

aindex=1
files=( null )

[ $# -eq 0 ] && { echo "Usage: $0 filename" ; exit 500; }

createList(){
    f=$(find . -iname "search.file" -print)
    for i in $f
    do
        files[$aindex]=$(echo "${i}")
            aindex=$( expr $aindex + 1 )
    done
    }

writeList() {
    for (( i=1; i<$aindex; i++ ))
    do
        echo "#$i : ${files[$i]}"
    done
    for (( i=1; i<$aindex; i++ ))
    do
        echo "/usr/bin/cp /cygdrive/c/testscript/TheCorrectFile.file ${files[$filenumber]}"
    done
}

createList
writeList

1 个答案:

答案 0 :(得分:2)

用以下四行替换整个脚本:

find . -iname "search.file" | while read file
do 
    /usr/bin/cp /cygdrive/c/testscript/TheCorrectFile.file "$file"
done

(但cp中的/bin不是吗?哦,在Cygwin中,两者都是。但是,使用/bin更便携。)