J'ai un dossier qui devrait contenir 1485 fichiers, nommé PA0001.png, PA0002.png ... jusqu'à PA1485.png
Certains d'entre eux manquent et j'aimerais écrire un script shell capable d'identifier les manquants et de les imprimer, sous forme de liste, dans un fichier .txt (de préférence sans la chaîne principale PA et l'extension .png, mais avec les zéros non significatifs, le cas échéant)
Je n'ai aucune idée de la façon de procéder, peut-être en utilisant awk? Mais je suis toujours un noob ... Toute aide serait très appréciée!
3 Réponses :
Vous pouvez obtenir la liste des numéros de séquence des fichiers manquants en utilisant la boucle bash
# Redirect output, per answer exec > file.txt for ((i=1 ; i<=1485 ; i++)) ; do # Convert to 4 digit zero padded printf -v id '%04d' $i if [ ! -f "PA$id.png" ] ; then echo $id fi done
Merci! Cela n'imprime pas les résultats dans un fichier .txt, non?
Vous pouvez utiliser la redirection - dans le script (voir script mis à jour), ou sur la ligne de commande
Voici une légère refactorisation de la réponse existante, avec des explications dans les commentaires.
# Assign each number in the sequence to i; loop until we have done them all for ((i=1 ; i<=1485 ; i++)) ; do # Format the number with padding for the file name part printf -v id '%04d' "$i" # If a file with this name does not exist, if [ ! -f "PA$id.png" ] ; then # Print it to standard output echo "$id" fi # Redirect the loop's standard output to a file done >missing.txt
Vous pouvez faire exactement cela sans une seule boucle Bash:
#!/usr/bin/env bash { find . \ -maxdepth 1 \ -regextype posix-extended \ -regex '.*/([[:digit:]]){4}\.png' \ -printf '%f\n' printf '%04d.png\n' {1..1485} } | sort | uniq --unique
Il combine la liste des fichiers avec la liste des fichiers attendus; puis triez et imprimez les entrées uniques qui sont celles qui ne sont que dans la liste attendue imprimée, il manque donc des fichiers.
voir unix.stackexchange.com/questions/219031/… et unix.stackexchange.com/questions/236164/... pour des questions et réponses similaires