web-dev-qa-db-ja.com

一度に2つのファイルをコピーする

コマンドを使用して一度に2つのファイルをコピーする場合はどうすればよいですか? ABCという名前のフォルダーが1つあり、ファイルが

mno.txt
xyz.txt
abcd.txt
qwe.txt and so on (100 no. of files)

ここで、一度にmno.txtxyz.txtをcpします。これどうやってするの ?

6
Avani badheka

cpファイルをディレクトリにしたい場合、cpの通常の構文を使用できます。

cp mno.txt xyz.txt destination_directory

または、簡潔にするためにブレース展開を使用します。

cp {mno,xyz}.txt destination_directory

明確にするために、cp-t--target-directory)オプションを使用することをお勧めします。これはGNU-ismです:

cp -t destination_directory {mno,xyz}.txt

ただし、cpを1回実行するだけで複数のファイルの内容をcpしたい場合は、できません。 cpは、あるファイルの内容を別のファイルにコピーするときに、一度に1つのファイルを処理します。

16
heemayl

cp -t destination_dir/ file1 file2構文を使用します。

例:

bash-4.3$ ls dir1
file1  file2  file3
bash-4.3$ ls dir2/
bash-4.3$ cp -t dir2/  dir1/file1 dir1/file2
bash-4.3$ ls dir2
file1  file2

元の回答への追加。

pythonで遊ぶのが好きな人は、コマンドラインで指定された任意の数のファイルをコピーできる次のスクリプトに興味があるかもしれません。最後の引数が宛先です。

デモ:

bash-4.3$ ls dir1
file1  file2  file3
bash-4.3$ ls dir2
bash-4.3$ ./copyfiles.py dir1/file1 dir1/file2 dir2
bash-4.3$ ls dir2
file1  file2

スクリプト自体:

#!/usr/bin/env python3
from shutil import copyfile
from os import path
from sys import argv

new_dir = path.realpath(argv[-1])
for f in argv[1:-1]:
    base = path.basename(f)
    orig_file = path.realpath(f)
    new_file = path.join(new_dir,base)
    copyfile(orig_file,new_file)
3

(たとえば)バックアップを作成するために(新しいディレクトリではなく)同じ場所にコピーする場合、非常に小さなforループを使用して新しい名前でコピーできます(ここでは.bak拡張機能)

for f in {mno,xyz}.txt; do cp -- "$f" "$f".bak; done

{brace expansion}は、例で特定のファイルを指定する最も簡潔な方法ですが、適切なシェルワイルドカード/グロビングを使用するか、必要に応じてファイルをリストすることができます:for f in foo bar baz;

3
Zanna

このようにすることができます:

cp {mno,xyz}.txt /path/to/destination

または、すべての.txtファイルが必要な場合:

cp {*}.txt /path/to/destination
1
Mher Asatryan