简而言之,我在一个文件夹中有重复的文件,其形式如下:
file.ext
file(1).ext
file(2).ext
file(3).ext
otherfile.ext
otherfile(1).ext
otherfile(2).ext
...
我只想移动file.ext
到otherfile.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
参数。