cpを使用して単一のファイルを複数のディレクトリにコピーする

cpを使用して単一のファイルを複数のディレクトリにコピーする

この質問は、前の質問に対する後続の質問です。以下を使用して多数のディレクトリを作成します。mkdir

シェルを使用していますbash。次のコマンドを使用して、それぞれプレフィックス "s"で始まる50のディレクトリを作成しました。

mkdir $(printf "s%02i " $(seq 1 50))

2番目の数字までゼロで埋めます。つまり、私が得たディレクトリはs01、、、s02...、、s49の形ですs50

cptest.txt上記の方法に似ていますか?たとえば、次のように動作しますか?私はUnix / Linuxにはあまり慣れていないので、誰かが安全だと言うまで、この方法を試したくありません。

cp test.txt $(printf "s%02i.txt " $(seq 1 50))

manページを見ると、このような複数のターゲットをサポートしていないcpようですが、次のようになります。cp

NAME
       cp - copy files and directories

SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST
       cp [OPTION]... SOURCE... DIRECTORY
       cp [OPTION]... -t DIRECTORY SOURCE...

DESCRIPTION
       Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

       Mandatory  arguments  to  long  options are mandatory for short options
       too.

ベストアンサー1

forループを介してシェルを繰り返すこともできます。これは最も基本的なアプローチであり、parallel外部ツールなどに依存せず、xargs理解するのが最も簡単だと思います。

for name in $(printf "s%02i " $(seq 1 50)); do
    mkdir $name
    cp test.txt $name
done

次のように書く方法は何百万ものあります。

for name in $(seq -w 1 50); do
    mkdir s$name
    cp test.txt s$name
done

実行する前に実行する内容を確認するには、コマンドの前にthisを追加すると、実行するのではなく行がecho印刷されます。

for name in $(seq -w 1 50); do
    echo mkdir s$name
    echo cp test.txt s$name
done

出力:

mkdir s01
cp test.txt s01
mkdir s02
cp test.txt s02
mkdir s03
cp test.txt s03
# etc.

おすすめ記事