Copiez simplement plusieurs fichiers à la fois à partir de la ligne de commande
Vous pouvez y parvenir de plusieurs manières. Le plus simple que j'ai vu est d'utiliser ce qui suit.
cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/
La syntaxe utilise la commande cp suivie du chemin d'accès au répertoire dans lequel se trouvent les fichiers souhaités. Tous les fichiers que vous souhaitez copier sont entourés de crochets et séparés par des virgules.
Assurez-vous de noter qu'il n'y a pas d'espace entre les fichiers. La dernière partie de la commande, /home/usr/destination/
est le répertoire dans lequel vous souhaitez copier les fichiers.
ou si tous les fichiers ont le même préfixe mais des terminaisons différentes, vous pouvez faire quelque chose comme ceci:
cp /home/usr/dir/file{1..4} ./
Où fichier1, fichier2, fichier3 et fichier4 seraient copiés.
De la façon dont vous avez formulé la question, je pense que c’est ce que vous recherchez, mais il semble également que vous cherchiez peut-être une commande à lire dans une liste de fichiers et à les copier tous dans un répertoire donné. Si tel est le cas, faites le moi savoir et je modifierai ma réponse.
Traiter les doublons avec python
J'ai donc écrit un petit script en python qui, à mon avis, devrait faire l'affaire. Cependant, je ne suis pas sûr de votre degré de connaissance de python (je ne sais pas du tout), je vais donc essayer d'expliquer comment utiliser ce script du mieux que je peux et s'il vous plaît, posez autant de questions que vous le souhaitez.
import os,sys,shutil
### copies a list of files from source. handles duplicates.
def rename(file_name, dst, num=1):
#splits file name to add number distinction
(file_prefix, exstension) = os.path.splitext(file_name)
renamed = "%s(%d)%s" % (file_prefix,num,exstension)
#checks if renamed file exists. Renames file if it does exist.
if os.path.exists(dst + renamed):
return rename(file_name, dst, num + 1)
else:
return renamed
def copy_files(src,dst,file_list):
for files in file_list:
src_file_path = src + files
dst_file_path = dst + files
if os.path.exists(dst_file_path):
new_file_name = rename(files, dst)
dst_file_path = dst + new_file_name
print "Copying: " + dst_file_path
try:
shutil.copyfile(src_file_path,dst_file_path)
except IOError:
print src_file_path + " does not exist"
raw_input("Please, press enter to continue.")
def read_file(file_name):
f = open(file_name)
#reads each line of file (f), strips out extra whitespace and
#returns list with each line of the file being an element of the list
content = [x.strip() for x in f.readlines()]
f.close()
return content
src = sys.argv[1]
dst = sys.argv[2]
file_with_list = sys.argv[3]
copy_files(src,dst,read_file(file_with_list))
Ce script devrait être relativement simple à utiliser. Tout d’abord, copiez le code ci-dessus dans le programme gedit (qui devrait être pré-installé dans Ubuntu) ou dans n’importe quel autre éditeur de texte.
Une fois cette opération terminée, enregistrez le fichier sous le nom move.py dans votre répertoire de base (il peut s’agir de n’importe quel répertoire mais, pour votre facilité d’instruction, il suffit d’utiliser le répertoire de base) ou ajoutez le répertoire dans lequel le fichier se trouve dans votre PATH. Puis cd
dans votre répertoire personnel (ou le répertoire dans lequel vous avez enregistré move.py) à partir du terminal et tapez la commande suivante:
python move.py /path/to/src/ /path/to/dst/ file.txt
Cela devrait copier tous les fichiers répertoriés du répertoire source dans le répertoire de destination avec les doublons au format pic (1) .jpg, pic (2) .jpg, etc.
fichier.txt doit être un fichier qui répertorie toutes les images que vous souhaitez copier avec chaque entrée sur une ligne distincte.
Ce script ne doit en aucun cas affecter le répertoire source. Toutefois, veillez à entrer les chemins d'accès corrects aux répertoires source et de destination. Le pire qui puisse arriver est de copier les fichiers dans le mauvais répertoire.
Remarques
- Ce script suppose que toutes les images d'origine se trouvent dans le même répertoire. Si vous souhaitez également vérifier les sous-répertoires, vous devez modifier le script.
- Si vous saisissez un nom de fichier par erreur, le script génère le message d'erreur
"Le fichier n'existe pas" et vous invite à "appuyer sur la touche Entrée" pour continuer et le script continue à copier le reste de la liste.
- N'oubliez pas la fin
/
du chemin d'accès au
répertoire source et du chemin d'accès au répertoire de destination. Sinon, le script vous créera une erreur.
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
oùp
est pour copier l'autorisation du dossier.