簡體   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