1. ホーム
  2. bash

[解決済み] Bash。フォルダ構造を保持したまま再帰的に名前付きファイルをコピーする

2022-12-17 08:13:41

質問

期待していたのですが。

cp -R src/prog.js images/icon.jpg /tmp/package

を実行すると、出力先ディレクトリに対称的な構造が得られます。

/tmp
|
+-- package
    |
    +-- src
    |   |
    |   +-- prog.js
    |
    +-- images
        |
        +-- icon.jpg

のようになりますが、その代わりに両方のファイルが/tmp/packageにコピーされます。フラットなコピーです。 (これはOSXでの話です)。

ワイルドカード (例: src/*.js) で指定されたファイルを含むすべてのファイルを、宛先ディレクトリ内の適切な場所にコピーするために使用できる、簡単な bash 関数はありますか? 例えば、"各ファイルについて、以下のように実行します。 mkdir -p $(dirname "$file"); cp "$file" $(dirname "$file") のようなものですが、おそらく単一のコマンドです。

これは関連するスレッドで、それが不可能であることを示唆しています。 なぜなら、ワイルドカードであろうとなかろうと、単にファイルのリストを提供し、それらすべてを宛先ディレクトリにコピーさせたいと思うからです。IRC MS-DOS の xcopy はこれを行いますが、cp には同等のものがないようです。

どのように解決するのですか?

-parentsオプションを使用してみましたか?OS X がサポートしているかどうかは知りませんが、Linux では使えます。

cp --parents src/prog.js images/icon.jpg /tmp/package

OS Xでうまくいかない場合は、以下を試してみてください。

rsync -R src/prog.js images/icon.jpg /tmp/package

aifが提案したように