繁体   English   中英

查找命令上的Bash脚本循环:输出包含空格

[英]Bash Script looping on Find Command: output has spaces

我有以下代码尝试查找与某些模式匹配的所有文件,并将它们复制到新目录,如果文件已存在,则添加后缀。 这是因为重复的文件名出现在原始列表中-因为它们在不同的目录中找到。

它可以按预期工作,除了fot文件名包含for in loop中用作分隔符的spaces

这段代码来自我使用过的Stackoverflow的各个部分,我并不完全了解。

我尝试了各种引用文件名的组合,以至于我只复制了带空格的文件。

有人可以建议我如何解决此问题

patterns=( "wom*.gif" "StarB*.gif" "logos*.gif" )
for pattern in "${patterns[@]}"
do
  for fname in $(find $source -name $pattern); 
  do
    echo Path-and-Filename: $fname
    filename=$(basename "$fname")
    extension=${filename##*.}
    filename=${filename%.*}
    echo Just-Filename: $filename.$extension
    suffix=""
    count=0
    while [ -f $dest$filename$suffix.$extension ]
    do
      count=$(($count+1))
      suffix="("$count")"
    done

    cp -v -p "$fname" $dest"$filename"$suffix.$extension >>$dest"CopyImageFiles-"$(date +"%Y-%m-%d").log 2>>$dest"CopyImageFiles-"$(date +"%Y-%m-%d").log
  done
done

好吧,我使用@ormaaj的使用while循环进行读取的想法来使其工作。 我还没有弄清楚它的作用,但是现在我已经复制了所有文件,这就是我想要的。

我确信它仍然是“脆弱的”,任何建议都将不胜感激。

我不使用-print0,因为我不知道如何读取输出的行,它显示为一长行。 我假设我需要为每个文件名设置定界符,但无法弄清楚。 如今大脑很慢。

patterns=( "*.gif" "*.GIF" "*.tif"  "*.TIF" "*.jpg" "*.JPG" "*.png" "*.PNG")
for pattern in "${patterns[@]}"
do
  find "/Volumes/Public/media_pics" -name "$pattern" | while IFS= read -r fname;
    do
      echo Full-Filename: "$fname"
      filename=$(basename "$fname")
      extension=${filename##*.}
      filename=${filename%.*}
      echo Just-Filename: $filename.$extension
      suffix=""
      count=0
      while [ -f $dest$filename$suffix.$extension ]
      do
        count=$(($count+1))
        suffix="("$count")"
      done

      cp -v -p "$fname" "$dest$filename$suffix.$extension" >>$dest"CopyImageFiles-"$(date +"%Y-%m-%d").log 2>>$dest"CopyImageFiles-"$(date +"%Y-%m-%d").log
  done
done

您做的部分不错。

for pattern in "${pattern[@]}"中的pattern ,效果很好,将空格保留到pattern变量中。

for fname in $(find $source -name $pattern); 被打破。
请记住, pattern包含一个空格。
修正为:

for fname in $(find "$source" -name "$pattern");

在后面的语句中加引号是一个练习;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM