(ディスク全体で)あるファイルを別のファイル(両方とも同じパスにある)で検索し(一致する場合)、置き換える必要があります。
例:
Folder 1
x*.txt (good) (e.g.: xFile.txt)
*.txt (bad) (e.g.: File.txt)
同じパスにある 2 つのファイルが一致する場合は、 : を削除し、*.txt (e.g.: File.txt)
: の名前を次のようx*.txt (e.g.: xFile.txt)
に変更する必要があります。*.txt (e.g.: File.txt)
結果:
Folder 1
*.txt (e.g: File.txt... old xFile.txt)
私は次のコマンドを使用します。
find -name 'x*.txt' | sed -r 'p;s/g([^\/]*.txt)/\1/' | xargs -d '\n' -n2 mv
問題は、コマンドを実行する前に、コマンドが両方のファイルが存在する(xFile.txtとFile.txtが同じパスにある)ことを確認しないことです。
どうすれば解決できますか?事前にありがとう
ベストアンサー1
GNUツールを使用すると、次のことができます。
(export LC_ALL=C
find . -name '*.txt' -print0 |
sed -Ez 's|/x([^/]*)$|/\1|' |
sort -z |
uniq -zd |
sed -z 'h;s|.*/|&x|;G' |
xargs -r0n2 echo mv)
複数の名前で始まるファイルがないとしますx
。たとえば、そうではありません。mv ./xx.txt ./x.txt