J'ai un répertoire:
⯠find ./images -name *150x150.jpg -exec cp {} ./another-directory \;
Je voudrais copier tous ces fichiers ( thumb-150x150.jpg
) dans un répertoire.
XXX
Mais bien sûr, chaque fichier sera écrasé par le suivant.
Alors, comment pourrais-je les copier soit dans:
1) 1.jpg
, 2.jpg
, 3.jpg
... etc
ou
2 ) utilisez l'ID de sous-répertoire (./images/ 2060511653921052666 .images / thumb-150x150.jpg) comme nom de fichier cible ( 2060511653921052666.jpg
dans cet exemple)? p >
3 Réponses :
Un simple script bash, utilisant $ RANDOM
pour générer un nombre aléatoire pour chaque image copiée. Un nombre aléatoire est incorporé dans le nouveau nom de chaque fichier.
Notez que $ RANDOM
génère un nombre aléatoire entre 1 et 32767. Ainsi, le même nombre aléatoire pourrait être produit plus d'une fois. Ce n'est probable que si vous aviez des dizaines de milliers d'images à copier.
Il est assez facile d'améliorer le caractère aléatoire de chaque nombre généré est nécessaire.
# !/bin/bash cd images for d in * do [ -d $d ] && cd $d for image in *150x150.jpg do cp -pv $image /another-dir/thumb${RANDOM}.jpg done [ -d $d ] && cd .. done
p>
vous pouvez utiliser la boucle:
i=1 find ./images -name *150x150.jpg | while read line; do cp $line /anotherdir/$i.jpg i=$[i+1] done
Remplacez i = $ [i + 1]
par ((i ++))
.
Si vous avez GNU parallèle, c'est possible:
find -iname "*.mp3" | parallel 'cp {} ~/tmp/{/.}_`stat -c%i {}`.mp3' {/} .......... gets just the filename with no full path "basename" {.} .......... removes extension
le stat -c% i {}
obtient l'inode pour chaque fichier
J'ai testé la commande ci-dessous sur mon système:
find ./images -name *150x150.jpg | \ parallel 'mv {} ./another-directory/`stat -c%i {}`_{/}'
Avant d'exécuter la commande proprement dite, vous pouvez mettre une commande echo
devant cp ou mv dans l'ordre pour tester votre commande.
chaque fichier aura évidemment besoin d'un nom nouveau / distinct; alors que la communauté SO peut proposer une longue liste de nouveaux noms / formats, le format du nouveau nom est finalement à vous de décider; comment comptez-vous référencer / utiliser ces fichiers à l'avenir? devrez-vous appliquer n'importe quel type de classement aux nouveaux noms de fichiers? avez-vous besoin d'une capacité à rechercher / lister les fichiers en fonction d'un modèle spécifique? le nouveau nom de fichier doit-il contenir des informations pour indiquer d'où il provient? le fichier doit-il être lié / référencé à un autre répertoire ou fichier?
Le nom de fichier doit être distinct - c'est tout. Je n'ai pas besoin de faire référence à un fichier particulier. J'ai juste besoin de tous en un seul endroit (dossier).
@gib: Pourquoi ne pas nommer simplement les fichiers, c'est-à-dire
2060511653921052666-thumb-150x150.jpg
. Vous pouvez ensuite tous les mettre dans le même répertoire et toujours voir d'où ils viennent?