つまり、次の形式のフォルダに重複ファイルがあります。
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/
正規表現は、1つ以上の数字(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