親ディレクトリを失うことなく、子ディレクトリにある同じ名前の複数のファイルを別のディレクトリにコピーする方法は?

親ディレクトリを失うことなく、子ディレクトリにある同じ名前の複数のファイルを別のディレクトリにコピーする方法は?

他のAndroidプロジェクトの画像ファイルを現在のプロジェクトにコピーすると、いくつかの不快感があります。

nice_little_icon.pngProject1ディレクトリの下の各ディレクトリ、、およびdrawable-ldpiファイルをdrawable-mdpi呼び出すとします。drawable-hdpidrawable-xhdpidrawable-xxhdpires

resこれで、単一のLinux / Unixコマンドを使用してこのファイルをproject2のディレクトリにコピーすることができますか?

だから私の最終結果は

Project1/../res/drawable-ldpi/nice_little_icon.png -> Project2/../res/drawable-ldpi/nice_little_icon.png
Project1/../res/drawable-mdpi/nice_little_icon.png -> Project2/../res/drawable-mdpi/nice_little_icon.png
Project1/../res/drawable-hdpi/nice_little_icon.png -> Project2/../res/drawable-mdpi/nice_little_icon.png
Project1/../res/drawable-xhdpi/nice_little_icon.png -> Project2/../res/drawable-xhdpi/nice_little_icon.png
Project1/../res/drawable-xxhdpi/nice_little_icon.png -> Project2/../res/drawable-xxhdpi/nice_little_icon.png

答え1

あなたはそれを使用することができますrsync

rsync -avzh -n --include='*/' --include='*nice_little_icon.png' --exclude='*' Project1/../res/ Project2/../res/

これは呼び出されたファイルのみnice_little_icon.pngからコピーされ、ファイルの親ディレクトリ(など)がない場合はその下に作成されます。Project1/../res/*Project2/../res/drawable-ldpidrawable-ldpiProject2/../res/

rsyncコマンドを説明してください。

  • -avzh-a基本的に「タイムスタンプ、権限、その他いくつかを繰り返し保存します」を意味し、冗長性を意味し、-v転送-z時にファイルを圧縮するという意味(実際には必要ではありませんが、とにかく使用したい)-hは人が読める読み取りモードでの印刷を意味します。 。
  • -n:試運転を示します。したがって、このコマンドを実行しても何も起こりません。実際にコマンドを実行するには、それを削除する必要があります。
  • --include='*/' --include='*nice_little_icon.png' --exclude='*'rsync:デフォルトでは、次に終わるファイルだけをコピーし、nice_little_icon.png残りはすべて除外することを意味します。
  • Project1/../res/:ソースディレクトリ。/最後に非常に重要なのは、「何でもコピーする」という意味です。下に res/'。ディレクトリを削除すると、/物理ディレクトリがターゲットにコピーされますが、resこれは望ましくありません。
  • Project2/../res/:ターゲットディレクトリ。

上記のコマンドを実行すると、実行するアクション(つまり、コピーするディレクトリとファイル)が表示されます。

./
ドローアブル-hdpi/
drawable-hdpi/nice_little_icon.png
ドローアブル-mdpi/
drawable-mdpi/nice_little_icon.png
...

これは次のようになります(つまり、親ディレクトリ、ファイルのみnice_little_icon.png)。よかったら-n実際に操作を実行し、ファイルをコピーするようにコマンドから削除します。

答え2

あなたはそれを使用することができますpaxtarコマンド(および標準化された代替cpio)このコマンドはすべてのPOSIX互換システムにありますが、一部のLinuxディストリビューションでは、デフォルトのインストールではこのコマンドが省略されています。pax宛先ディレクトリの下のすべてのパスをコピーします。

pax -rw -pe drawable-*/nice_little_icon.png ../../Project2/res/

-sこのオプションを使用すると、シェルでワイルドカードを使用する代わりに特定のファイルを無視できます。

pax -rw -pe -'s!^drawable-[^/]*/nice_little_icon\.png$!&!' -'s!.*/.*!!' drawable-* ../../Project2/res/

関連情報