コマンドを使用して一度に2つのファイルをコピーする場合はどうすればよいですか? ABC
という名前のフォルダーが1つあり、ファイルが
mno.txt
xyz.txt
abcd.txt
qwe.txt and so on (100 no. of files)
ここで、一度にmno.txt
とxyz.txt
をcpします。これどうやってするの ?
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つのファイルを処理します。
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)
(たとえば)バックアップを作成するために(新しいディレクトリではなく)同じ場所にコピーする場合、非常に小さなfor
ループを使用して新しい名前でコピーできます(ここでは.bak
拡張機能)
for f in {mno,xyz}.txt; do cp -- "$f" "$f".bak; done
{
brace expansion}
は、例で特定のファイルを指定する最も簡潔な方法ですが、適切なシェルワイルドカード/グロビングを使用するか、必要に応じてファイルをリストすることができます:for f in foo bar baz;
このようにすることができます:
cp {mno,xyz}.txt /path/to/destination
または、すべての.txtファイルが必要な場合:
cp {*}.txt /path/to/destination