パスを保持する複数のファイルを置き換える

パスを保持する複数のファイルを置き換える

ディレクトリがありますそして第二。それぞれに異なるディレクトリが含まれていますプロジェクト.json中。ただプロジェクト.jsonファイルはディレクトリに保持されるため、ディレクトリをコピーして貼り付けることはできません。

ㅏ:

./path/Item A/item.json
./path/Item B/item.json
...
./path/Item Z/item.json

第二:

./new/Item A/item.json
./new/Item B/item.json
...
./new/Item Z/item.json

./path/どのitem.jsonファイルを適切なフォルダにコピーするのですか./new

私の解決策:

ディレクトリのインポート

ls -l ./path | grep "^d" | cut -d' ' -f 16

その後、結果を次のように使用できます。

for i in `ls -l ./path | grep "^d" | cut -d' ' -f 16`; echo "Dir: $i"; done

だから私はcp彼らと一緒にできるように

for i in `ls -l ./path | grep "^d" | cut -d' ' -f 16`; cp "$i/item.json" "../new/$i/item.json" ; done

この解決策は大丈夫ですが、よりエレガントな方法があると確信しています。

答え1

次の行が役に立ちます。

$ find ./path/ -type f -exec bash -c 'cp $0 ${0/path/new}' {} \;

ここでは、コマンドはディレクトリ内のすべてのテキストファイルをfind検索します。./path/ファイルが見つかったら、/new/単に文字列をtoに置き換える小さなbashスクリプトを呼び出して、pathファイルをターゲットディレクトリにコピーしますnew

答え2

あなたの解決策は素晴らしいです!他のオプションを見たい場合は、ここに私のアドバイスがありますcp

私はあなたが "item.json"ファイルだけをコピーし、他のものをコピーしたくないとします。

cd path; cp --parents */item.json ../new

答え3

cpio(またはtar、しかしIMHOは遅く、cpioのようなオプションはありません)を使用してください-p!権限、日付など(必要な場合)、もちろんディレクトリ構造も維持します。

つまり:cd path ; find . | cpio -pvmd ../new

関連情報