他のディレクトリにコピーする必要がある多数のファイルを含むディレクトリがあります。すべてのファイルをコピーする必要はなく、一部のファイルのみをコピーする必要があることに注意してください。必要なすべてのファイルを1つずつ実行するのではなく、あるディレクトリから別のディレクトリにコピーするスクリプトを作成する方法はありますか?
答え1
cp
user79914の応答に対するあなたの意見を考慮すると、通常の前のコマンドからコピーしたいファイルを明示的にリストする必要があるように聞こえます。次の作業を行う必要があります。
cp FILE_1 FILE_2 FILE_3 /destination/directory
たとえば、コピー操作を複数回実行する場合は、次のようにできます。
for FILE in $(cat ./list_of_files.txt)
do
cp ${FILE} /destination/directory
done
この例では、必要なファイルのリストをテキストファイルに追加したとしますlist_of_files.txt
。この方法の利点は、list_of_files.txt
特にコピーを複数回実行する必要がある場合は、ファイルにコピーする必要がある新しいファイルを追加できることです。
その他の例については、次のリンクをご覧ください。
答え2
最も簡単な方法では、スクリプト技術は必要ありません。必要なのはテキストエディタだけです。もちろん、これを行うためのよりエレガントで一般的な方法がありますが、スクリプト技術が初心者レベルの場合は、莫大な学習曲線の上昇などを経ずに迂回することなく、すぐに作業を完了したい場合があります。
myfiles.txt
コピーする各ファイル名のリストが1行に1つずつ含まれているファイルがあるとします。私は次のように仮定します:
- リストには100万個未満のファイルがあります。
- 各行には、対応する
myfiles.txt
ソースファイルの正しいパスとファイル名が含まれています。 - ファイルをコピーするディレクトリパスが
test
あり、既に存在します。 - ファイル名に引用符、アポストロフィ、改行などの問題になる文字を含めないでください。
それでは、次のように話してください。
vi myfiles.txt
:%s/^/cp -vp '/
:%s-$-' test/-
ZZ
cp -vp '
これにより、各行の先頭(各ファイル名)と' test/
各ファイル名の末尾に配置されるファイルのリストが編集されます。
cp
これで、N個のファイルをディレクトリにコピーするN個のコマンドのリストが作成されましたtest/
。次のように実行できます。
sh < myfiles.txt
望むより。
答え3
ファイル名が似ている場合は、ワイルドカードを使用できます。たとえば、cp test* ~/test/
「test」で始まるすべてのファイルを ~/test ディレクトリにコピーします。
ディレクトリに見える(ドットではない)ファイルをコピーするには、これを行うことがcp ./* ~/test/
できます。