
たとえば、次のように異なるサブディレクトリに異なる名前を持つファイルがあります。
a/apple.txt
b/orange.txt
c/pear.txt
最終結果が次のように統一された名前(fruit.txt)を使用してそのディレクトリにどのようにコピーしますか?
a/apple.txt
a/fruit.txt
b/orange.txt
b/fruit.txt
c/pear.txt
c/fruit.txt
(a/apple.txt と a/fruit.txt ファイルの内容は同じでなければなりません)
私の考えは次のとおりです。
find . -name "*.txt" -exec cp {} fruit.txt \;
しかし、これがFruit.txtを対応するすべてのサブディレクトリに入れるのか、それとも現在のディレクトリに入れるのかはわかりません。
答え1
注文、
find . -name "*.txt" -exec cp {} fruit.txt \;
現在のディレクトリ内または下に.txt
ファイル名サフィックスがあるすべてのファイル(およびディレクトリなど)を正しく見つけて、すべてコピーします。fruit.txt
現在の目次。
あなたが望むのは、元のファイルと同じディレクトリにコピーすることです。定期的なfruit.txt
ファイルを削除し、すでに存在する名前を避けてください。
find . -type f -name '*.txt' ! -name fruit.txt -execdir cp -- {} fruit.txt \;
非標準(ただし一般的に使用される)-execdir
述語を使用している場合、使用するコマンドは見つかったファイルのディレクトリ内で実行されます。これは、上記のコードがファイルを見つけたファイルと同じディレクトリcp
にコピーすることを意味します。fruit.txt
必要な効果に応じて、ファイルのコピーの代わりにシンボリックリンクを使用できます。
find . -type f -name '*.txt' ! -name fruit.txt -execdir ln -sf -- {} fruit.txt \;