从包含重复文件的文件夹中移动唯一文件

从包含重复文件的文件夹中移动唯一文件

简而言之,我在一个文件夹中有重复的文件,其形式如下:

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

我只想移动file.extotherfile.ext另一个文件夹。可以在 中做到吗bash

我想这也许awk会有帮助?

答案1

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

答案2

这取决于。如果我们可以假设名称包含的任何文件(都应该被忽略,那么您可以这样做:

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

答案3

尝试这样的事情:

$ ls  *ext | grep -P '[^)]\.ext' | xargs -iXXxxFILEXXxx mv XXxxFILEXXxx target/

grep将过滤掉名称中带有括号的文件,并对结果xargs运行命令。mv丑陋的XXxxFILEXXxx标签用于将文件名作为mv参数。

相关内容