… et donc pour convertir en ordre lexicographique tout un dossier de JPEG, sans faire de boucle, sans gérer l'index soi-même et sans limite de taille de ligne de commande (sans * quoi), le tout en parallèle sur tous les cœurs dispo :
ls -1 | grep JPG | MAGICK_TMPDIR=/dev/shm parallel convert {} '/dev/shm/tests/$(printf %04d {#}).png'
(oui je fais tout dans shm, c'est plus rapide de mettre les fichiers temporaires et les résultats dans la RAM quand on en a assez, et ça bourrine moins HD/SSD)
Si toi aussi tu as l'habitude d'utiliser imagemagick pour plein de choses, parce que c'est plutôt complet et en ligne de commande, juste pour prévenir qu'il y a des limites assez strictes maintenant… genre, 256Mo de RAM, 1Go de disque…
Ces limites sont dans /etc/ImageMagick-6/policy.xml et il suffit de dégager le fichier ailleurs pour qu'elles disparaissent (ou de le modifier gentiment).
Pour voir les limites effectives :
convert -list resource
C'est sûrement bien sur un serveur quand un site web utilise ça pour faire des vignettes par exemple, mais sinon ça a l'air bien casse-pieds ces limites. Et le message d'erreur est super-génial :
montage-im6.q16: DistributedPixelCache '127.0.0.1' @ error/distribute-cache.c/ConnectPixelCacheServer/244
Copier un fichier avec scp à travers une autre machine-relais en une commande : possible (mais relou). Pour moi ça a donné un truc comme ça :
scp -o 'ProxyCommand ssh -W machine_finale:22 user@relais' -r /dossier/à/copier user@machine_finale:
Ici une explication que j'ai trouvée a posteriori après avoir galéré facile une heure : pourquoi grep semble ne pas fonctionner quand il grep sur quelque chose qui ne termine pas, et dans une autre commande ? Par exemple :
while true; do echo a; sleep 1; done | grep '' | cat
=> rien
while true; do echo a; sleep 1; done | grep ''
=> fonctionne
Dans mon cas c'était inotifywait, grep, while read mais c'est bien pareil.
La réponse est toute bête mais il fallait y penser (ou lire tout le man de grep, merci ban :)) : buffer sur stdout. grep se fait bufferiser sa sortie, ce qui est tout à fait normal. Il suffirait d'attendre plein d'événements dans le pipe pour les voir arriver. Et le fait d'avoir un terminal au bout masque ça car il bufferise pas plus qu'un ligne.
Bref, il suffit de dire "--line-buffered" à grep :)
Une liste de photos et envie de faire un tar avec seulement les dernière ? Au lieu de s'embêter à utiliser une interface graphique et de sélectionner, d'imaginer des solutions à base for et de ln ou autre, il suffit juste d'utiliser cette option : --after-date=date (ou juste -N)
On peut donner un fichier (considéré comme tel si commençant pas '.' ou '/') comme référence, pratique.