Bash

從包含重複文件的文件夾中移動唯一文件

  • September 18, 2015

簡而言之,我在一個文件夾中有重複的文件,格式如下:

file.ext
file(1).ext
file(2).ext
file(3).ext
otherfile.ext
otherfile(1).ext
otherfile(2).ext
...

我只想移動file.extotherfile.ext另一個文件夾。有可能做到bash嗎?

我認為這可能awk會有所幫助?

bash:

shopt -s extglob # activates extended pattern matching features
mv !(*\(+([0-9])\)).ext /path/to/target/

正則表達式匹配所有不以 結尾的文件(n).ext,其中n是一個或多個數字:+([0-9])

您可以通過以下方式進行檢查echo

echo !(*\(+([0-9])\)).ext 

印刷:

file.ext otherfile.ext

這取決於。如果我們可以假設任何名稱包含的文件(都應該被忽略,你可以這樣做:

shopt -s extglob ## turns on fancy glob patterns
mv !(*\(*) /path/to/target

如果您可以擁有其他名稱,(或者如果您只需要移動那些重複的文件,您可以執行以下操作:

for f in *\(*; do 
   ## Does this file have an original?
   [[ -e "${f%%(*}.${f##*.}" ]] && 
       ## Move the original
       mv "${f%%(*}.${f##*.}" /path/to/target; 
done

引用自:https://unix.stackexchange.com/questions/230560