Que faire si je veux copier deux fichiers à la fois en utilisant la commande? disons que j'ai un dossier nommé ABC
et les fichiers sont
mno.txt
xyz.txt
abcd.txt
qwe.txt and so on (100 no. of files)
Maintenant, je veux cp mno.txt
et xyz.txt
à la fois. Comment puis-je faire ceci ?
En supposant que vous souhaitiez cp
fichiers dans un répertoire, vous pouvez utiliser la syntaxe habituelle pour cp
:
cp mno.txt xyz.txt destination_directory
Ou utilisez l’accolade expansion par souci de brièveté:
cp {mno,xyz}.txt destination_directory
Par souci de clarté, il est préférable d'utiliser l'option -t
(--target-directory
) de cp
, il s'agit de GNU-ism:
cp -t destination_directory {mno,xyz}.txt
Notez simplement que si vous voulez cp
le contenu de plusieurs fichiers en une seule opération de cp
, vous ne pouvez pas. cp
traite un fichier à la fois lors de la copie du contenu d'un fichier dans un autre.
Utilisez la syntaxe cp -t destination_dir/ file1 file2
.
Exemple:
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
Les utilisateurs qui aiment jouer avec python peuvent être intéressés par le script suivant, qui permet de copier un nombre arbitraire de fichiers spécifiés sur la ligne de commande, le dernier argument étant la destination.
Démo:
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
Le script lui-même:
#!/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)
si vous voulez les copier au même emplacement (pas dans un nouveau répertoire) pour effectuer des sauvegardes (par exemple), vous pouvez utiliser une très petite boucle for
pour les copier avec de nouveaux noms (en ajoutant ici une extension .bak
)
for f in {mno,xyz}.txt; do cp -- "$f" "$f".bak; done
{
brace expansion}
est la manière la plus succincte de spécifier les fichiers particuliers dans votre exemple, mais vous pouvez utiliser n'importe quel caractère générique de Shell/globbing approprié, ou lister les fichiers si nécessaire: for f in foo bar baz;
Vous pouvez faire comme ça:
cp {mno,xyz}.txt /path/to/destination
Ou si vous avez besoin de tous les fichiers .txt:
cp {*}.txt /path/to/destination