次のようなディレクトリ構造になっています。
dirA/[ファイルA、ファイルB、バーC、ファイルD、ファイルE、バーF] dirB/[ファイルA、バーC、ファイルE]
dirB にすでに存在するファイルのみを dirA から dirB にコピーしたいです。この選択コピーを行うにはどうすればよいですか?
答え1
たとえば、find コマンドを -exec オプション付きで使用できます。おそらく、次のような構文を使用することになります (dirB で実行する必要があり、再帰的であることに注意してください)。
find ./ -type f -exec cp '../dirA/{}' ./ \;
-type f は find に通常のファイルのみを考慮するように指示し、-exec は各ファイルに対して次のコマンドを実行するように指示します。最後の \; は実行するコマンドを終了します。{} は find によって実際のファイル名に置き換えられるプレースホルダーです。詳細とその他の使用例については find のマニュアル ページを参照してください。
私の PC では次のようになります:
desktop:~$ mkdir dirA
desktop:~$ mkdir dirB
desktop:~$ cd dirA
desktop:~/dirA$ touch foo bar this
desktop:~/dirA$ cd ..
desktop:~$ cd dirB
desktop:~/dirB$ touch bar this
desktop:~/dirB$ find ./ -type f -exec cp -v '../dirA/{}' ./ \;
»../dirA/./this“ -> »./this“
»../dirA/./bar“ -> »./bar“