編集する:明確にするために、質問は完全に書き直されました。
私はディレクトリツリー(新しい)といくつかの拡張機能が .new
あります。同じツリー(古い)その多くは、次のような名前のファイルを持っています。新しい拡張子を除くすべてのファイルを.old
コピーしたいです。.new
新しいディレクトリツリーエントリ古いファイルを含むディレクトリツリー.old
。拡張子を持つファイルを.new
書き込むとき古い.old
ディレクトリツリーの名前は同じですが、拡張子を持つファイルを削除したいと思います。
もしそうなら、新しいnew/foo/bar/file.new
ディレクトリツリーには、コピーする名前のファイルがあります。古いディレクトリツリーは、ファイルが終了するold/foo/bar/file.new
とold/foo/bar/file.old
ファイルが削除されます。
編集#1
この回答は以下で議論されます(関連のない背景情報を混乱させる古い質問を使用して)。答えの1つとして、以下に定式化された実際のソリューションをご覧ください。
答え1
基本的な方法は、mp3ファイルを含むディレクトリで実行することです。
for i in *.mp3; do cp "$i" /path/to/flac/ && rm path/to/flac/"${i%.*}".flac; done
名前で終わるすべてのファイルを繰り返し、.mp3
各ファイルを/path/to/flac/
flacファイルを含むディレクトリにコピーし、コピーが成功した場合, その.flac
ファイルを削除します。秘訣はシェルを使うことです。文字列演算機能を使用すると${i%.*}
拡張子が削除されるため、現在のmp3ファイルと同じ名前ですが、拡張子は同じファイルをrm ${i%.*}.flac
削除します。.flac
表示するには:
$ foo='abc.def'
$ echo ${foo%.*}
abc
答え2
これはterdonsの回答に関するコメントで議論された最終回答です。
cd new
for i in */*/*.new; do cp "$i" "path/to/old/${i}" && rm "path/to/old/${i//new/old}"; done