6 votes

Comment puis-je parcourir un dossier et déplacer/copier chaque élément N<sup>ème</sup> ?

Je veux faire un time lapse à partir d'un dossier d'images, mais il y en a trop et le time lapse progresse trop lentement. Comment puis-je sélectionner, par exemple, chaque 10ème élément, et soit copier soit déplacer les éléments dans un dossier séparé ?

5voto

njboot Points 8005

La manière la plus rapide est d'utiliser la syntaxe bash et awk dans votre Terminal.app

for file in `find /SOURCE/DIR -type f | awk 'NR %10 == 0'`; do echo mv $fichier /DEST/DIR ; done

La déclaration for introduit la boucle bash, pour itérer à travers un ensemble de données où fichier est la variable.

find analyse le /SOURCE/DIR pour ce qui est spécifié.

| agit comme un pipe, passant les résultats de find à stdin

awk interprète stdin et affiche uniquement les lignes répondant aux conditions spécifiées par 'NR %10 == 0’

  • NR est une variable intégrée awk qui spécifie le numéro d'enregistrement/ligne à évaluer.

  • % est un opérateur numérique indiquant à awk que le(s) caractère(s) suivant(s) doit être traité en tant que tel(s).

  • == est l'opérateur relationnel pour doit être égal à..

  • 0 est l'expression binaire pour TRUE

Alors, pour résumer: "trouver chaque 10ème fichier qui existe dans ce répertoire et l'afficher";

  • do introduit l'action à effectuer sur la sortie.
  • echo est utilisé pour vérifier la commande, dont les résultats seront affichés à stdout. Si tout semble bon, retirez-le et exécutez l'action (mv, cp)
  • mv est une commande bash intégrée pour déplacer (ou renommer) un fichier.
  • cp est une autre commande bash intégrée pour déplacer un fichier d'un répertoire à un autre tout en préservant l'original. Vous pouvez directement substituer cp à mv si vous souhaitez conserver le contenu du répertoire d'origine.
  • $fichier fait référence à la variable fichier qui a maintenant été définie.

Donc, pour résumer : dites-moi ce qui se passe lorsque je…(echo) "déplacez (ou, copiez) tous les fichiers spécifiés par les paramètres précédents vers cet autre répertoire;"

  • done

En résumé, indique à bash de terminer la boucle puisque vous avez terminé :)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X