ファイルとファイル構造をコピーし、新しいディレクトリにマージ

ファイルとファイル構造をコピーし、新しいディレクトリにマージ

次のコマンドラインを使用しました。

find src -name '*.json' | cpio -pdm lib

それで、以下のスクリーンショットのようにjsonファイルを見つけました。

スクリーンショット1

ただし、ディレクトリ構造全体をインポートしてlibフォルダに入れます。

スクリーンショット2

私の目標は、ファイルとそのディレクトリファイル構造(src - >サーバー - >データ - > diceware.json)を新しいフォルダー(lib - >サーバー - >データ - > diceware.json)にマージすることです。

たぶん誰かが助けることができると思います。

答え1

これは、find現在の場所へのフルパスが印刷されるために発生します(例:inclusive src)。これを防ぐには、最初のパスコンポーネントを削除するか、ディレクトリ構造にさらに移動する必要があります。

cd src && find . -name '*.json' -print0 | cpio -0pdm ../lib

答え2

次のことができます。

find . -name '*json' | 
    while IFS= read -r file; do 
        mkdir -p lib/$(dirname "$file"); 
        cp "$file" lib/"$(dirname "$file")"
done

または、ファイル名に改行文字を含めることができる場合:

find . -name '*json' -print0 | 
    while IFS= read -d '' -r file; do 
        mkdir -p lib/$(dirname "$file"); 
        cp "$file" lib/"$(dirname "$file")"
done

関連情報