J'ai un grand dossier d'images (en milliers) et j'ai une longue liste de fichiers, par nom de fichier exact, que je dois copier dans un autre dossier. Je souhaite savoir s’il est possible de sélectionner plusieurs fichiers spécifiques dans ce dossier, de les nommer, et de les copier dans un autre dossier à l’aide du terminal, sans les copier individuellement.
command-line
files
Quelqu'un avec trop de pict
la source
la source
cp -rp /copying/from/{folder1/,folder2/,folder3/} path/to/folder
oùp
est pour copier l'autorisation du dossier.Réponses:
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.
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:
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.
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: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
"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.
/
du chemin d'accès aurépertoire source et du chemin d'accès au répertoire de destination. Sinon, le script vous créera une erreur.
la source
cp $(pwd)/{file1,file2} /path/to/dst/
Oucp $(pwd)/{file1,file2} $(pwd)/{renamed1,renamed2}
, etc.Il me manque peut-être un détail de votre question, mais les réponses fournies semblent excessives. Si vous voulez une solution en ligne de commande et non un script, pourquoi pas:
La bonne chose à faire de cette façon est que vous pouvez compléter les noms de fichiers
la source
brew install coreutils
alors vous pouvez obtenir des trucs de gnou habituels avecg
préfixe. Donc ça va êtregcp -t ....
cp
, et en particulier, ni OpenBSD ni FreeBSD ne disposent de cette option, alors oui - cela estcp
spécifique à GNU . Ce n'est pas non plus spécifié par la norme POSIX . Comme il s'agit d'un site spécifique à Ubuntu, c'est acceptable, mais pour porter des scripts entre des systèmes d'exploitation, il est préférable de s'en tenir à la norme POSIXVoici une solution pure bash. Il lit les noms de fichier d'un fichier d'entrée (un par ligne) et les copie, en renommant les doublons.
Enregistrez ce script dans un dossier de votre
$PATH
et appelez-le avec la liste des chemins en entrée:Vous pouvez également exécuter le tout en tant que commande du terminal:
la source
Selon la description de la question, ma compréhension est la suivante:
input.txt
Ainsi, on peut utiliser la commande suivante:
Explication:
-I %
spécifie le symbole du fichier en cours de traitement à utiliser dans la commande--arg-file=input.txt
spécifie de prendre les arguments à commanderinput.txt
cp /path/to/origin_dir/% /path/to/destination/
effectuera lacp
commande/path/to/origin_dir/%
en remplaçant par/path/to/origin_dir/
et le nom du fichier en cours de traitement.Exemple pratique:
la source