Linuxでファイルを複数のディレクトリにコピーする

1. 概要

このチュートリアルでは、Linuxの複数のディレクトリにファイルをコピーする方法を学びます。 コマンドは、https://linux.die.net/man/1/bash [_bash_]を含むPOSIXシェルで動作します。

2. 単一のディレクトリへ

https://linux.die.net/man/1/cp[_cp_]コマンドを使用して、ファイルを単一のディレクトリに簡単にコピーできます。
cp source1 source2 ... directory
ただし、_cp_は単一の宛先ディレクトリのみを取ります。
それでは、どのようにしてファイルを複数のディレクトリにコピーできますか?

2. シェルループ

*ループを使用してコピーコマンドを繰り返してみてください。これにより、_favicon.ico_ファイルが_dir-1_と_dir-2_の両方にコピーされます。
for i in dir-1 dir-2; do cp favicon.ico ${i}/; done
_i_変数の後のスラッシュは、ファイルではなくディレクトリにコピーすることを保証します。 中括弧は必須ではありませんが、読みやすくするのに役立ちます。

3. 特殊文字を扱う

もっとエキゾチックなファイル名を処理する方法を見てみましょう。
  • Linuxでは、ファイル名にすべての種類の文字を使用できることに注意してください。*これには、空白、句読点、さらには絵文字や改行も含まれます。 スラッシュと_null_文字を除くすべてのものは、ファイル名に表示される可能性があります。

    これらの名前は、適切に引用しないとシェルスクリプトに大混乱をもたらします。
    引用符で囲まれたファイル名を使用して、_i_変数を引用してみましょう。
for i in "I'm a directory!" 'Another directory'; do cp favicon.ico "${i}/"; done

4. ワイルドカードマッチング

いくつかの検索条件を使用して、宛先ディレクトリを動的に提供したい場合はどうなりますか?
たとえば、ファビコンファイルを_ / var / www_内のすべてのディレクトリにコピーしますが、_ / var / www / recipe-site-staging_のような、_staging_で終わるディレクトリのみにコピーします。
find /var/www -maxdepth 1 -iname '*staging' -type d -exec cp -- favicon.ico '{}' ';'
_https://linux.die.net/man/1/find [find] _は、指定されたディレクトリの_ / var / www_を検索します。
この例では、_- maxdepth 1_を使用して、複数のレベルではなく、_ / var / www_の内部に直接あるディレクトリを探しています。 これにより、たとえば、_ / var / www / site-staging_は一致しますが、_ / var / www / static / site-staging_は一致しません。
_-iname_は、探しているディレクトリ名の大文字と小文字を区別しないパターンです。_* _はワイルドカード文字です。
_-exec_は、「*各ディレクトリで実行するコマンド*」を示す便利なパラメーターです。
実行するコマンドは_cp – favicon.ico <ディレクトリ名> _です。 *二重ダッシュは、_cp_sオプションリストを終了するためのものです。*これにより、_– force_などの名前のディレクトリが_cp_コマンドのオプションとして誤って機能することがなくなります。
中括弧は、コマンド内のディレクトリ名を配置する場所を示します。 *コマンドの終わりをセミコロンで示します*。
中括弧とセミコロンが単一引用符で囲まれているため、シェルで解釈されないことに注意してください。

5. 結論

この手っ取り早い記事では、定義済み入力とワイルドカード入力の両方について、ファイルを複数のディレクトリにコピーすることに焦点を当てました。