Debian Debian-France Debian-Facile Debian-fr.org Debian-fr.xyz Debian ? Communautés

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 18-04-2020 16:22:52

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Supprimer un fichier orphelin

Bonjour,

J'ai des fichiers avec des extensions *.sub et *.idx dansun dossier qui vont toujours par paire

exemple :


01_vobsub.idx    01_vobsub.sub

03_vobsub.idx    03_vobsub.sub

05_vobsub.sub
 




comment faire pour supprimer celui qui serait orphelin (ici 05_vobsub.sub) sachant qu'il n'a pas toujours le même numéro ?

J'ai trouvé un façon de contourner ce problème mais ça ne pourra pas le faire à la longue. hmm

Dernière modification par golgot200 (18-04-2020 16:25:10)

Hors ligne

#2 18-04-2020 16:36:28

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : Supprimer un fichier orphelin

En fait,

si 01.idx fait moins de -500c  supprimer son jumeau 01.sub (qui peut faire n'importe quel poids)

et inversement si 01.sub fait 0c supprimer son jumeau 01.idx qui peut faire plus de 500c (mais supprimer tout de même)

Hors ligne

#3 19-04-2020 05:09:37

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Supprimer un fichier orphelin

J'ai fait ce code là hier pour supprimer des .RAW orphelins,
(je préfère généralement déplacer les fichiers plutôt que de les supprimer dans un script)

#!/bin/bash

mkdir temp

for file in *.ARW; do
   
    f_name="${file%.*}.JPG"

    if [ -f "$f_name" ]; then
        echo "1"
    else
        echo "0"
        $(mv $file "temp/$file")
    fi
done
 


En revanche je n'ai pas compris ton deuxième message

Hors ligne

#4 19-04-2020 08:17:21

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : Supprimer un fichier orphelin

Bonjour

Merci David5647 pour ton aide.
Ne tiens pas compte de mon deuxième message. J'ai contourné le problème. C'est vrai que ce message est pas clair.

Les fichiers vont par paire quand on extrait les vobsubs d'un dvd.
Il se compose d'un fichier idx et de son sub. Parfois sur un dvd, l'idx est "bidon", il ne comporte que quelques lignes.
Si je ne supprime pas cet idx du dossier, il sera intégré par la suite dans la vidéo et apparaitra dans les choix de sélection des sous-titres du player.
Rien n'apparrait à l'écran si je le sélectionne.
Mais parfois c'est rare, mais ça m'est arrivé hier, c'est de tomber sur un idx bon en taille, mais un sub de zéro octet.
Je ne sais pas son utilité, bien que j'ai un doute ( sous-titres gravé), mais cela me fait "planter" la suite de mon script.
Donc c'est de virer les idx de moins de 1ko et automatiquent son sub lié.



1.idx   1.sub
3.idx   3.sub  >>>>  idx moins de 1k, on vire les deux
4.idx   4.sub
5.idx   5.sub  >>>>  idx moins de 1k, on vire les deux
7.idx   7.sub
7.idx   8.sub  >>>>  sub à 0k , on vire les deux
 



Résultat voulu :


1.idx   1.sub
5.idx   5.sub
7.idx   7.sub
 



Je regarde ta proposition wink

Dernière modification par golgot200 (19-04-2020 09:13:17)

Hors ligne

#5 19-04-2020 08:37:03

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : Supprimer un fichier orphelin

Une question, si je veux supprimer une série de fichiers de moins d'une certaine taille.

Dans le propriètés, je vois

Taille 537 octets (537 octets)



et

Taille sur le disque 4,1 ko (4096 octets)



laquelle valeur je prend en compte pour une supression ?

Dernière modification par golgot200 (19-04-2020 08:37:17)

Hors ligne

#6 19-04-2020 11:10:09

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Supprimer un fichier orphelin

ton disque dur est subdivisé en secteurs (cluster), qui constituent une unité de mémoire qui ne peut être remplie à moitié,
soit la talle sur une disque, une taille "arrondie au supérieur" à n*taille_de_secteur
donc la valeur réelle est la première, l'autre (qui est toujours un peu plus grande) est comme son nom l'indique la place prise sur le disque

edit :
si c'est pas clair, qwanter ou duckduckgoer "taille sur le disque vs taille linux" renvoie étonnament de bon résultats

Dernière modification par David5647 (19-04-2020 11:15:44)

Hors ligne

#7 19-04-2020 11:17:39

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : Supprimer un fichier orphelin

Impeccable, merci pour l'explication smile

Hors ligne

#8 19-04-2020 11:55:12

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Supprimer un fichier orphelin

Tu peux utiliser la commande stat -c%s "mon_fichier.idx" pour obtenir la tailler en octet, soit dans un script:

#!/bin/bash

for file in *.idx; do

    taille=$(stat -c%s "$file")

    if [ 1000 -gt $taille ]; then
        echo "1"

    else
        echo "0"

    fi

done

 


(gt = greater)

Dernière modification par David5647 (19-04-2020 11:56:25)

Hors ligne

#9 19-04-2020 16:28:42

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : Supprimer un fichier orphelin

David5647 a écrit :

Tu peux utiliser la commande stat -c%s "mon_fichier.idx" pour obtenir la tailler en octet, soit dans un script:

#!/bin/bash

for file in *.idx; do

    taille=$(stat -c%s "$file")

    if [ 1000 -gt $taille ]; then
        echo "1"

    else
        echo "0"

    fi

done

 


(gt = greater)




Ha ouais pas bête !!!

me faire le truc en y intégrant un ( ou si *.sub est égal à O ) dans la même commande.
un mv des deux fichiers idx et sub dans un dossier que je crée par un mkdir


if [ 1000 -gt $taille_IDX ] || [ 0 -eq $taille_SUB ] ; then
echo "un des deux fichiers n'est pas bon"
"COMMANDE On déplace les deux fichiers dans un dossier, sans ce soucier que l'un ou l'autre soit bon"
    else
        echo "les deux fichiers sont bon"
 



Est-ce faisable ?

Dernière modification par golgot200 (19-04-2020 16:38:12)

Hors ligne

#10 19-04-2020 17:12:04

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Supprimer un fichier orphelin

Yep, ça doit se laisser faire!

Tu ajoutes autour de ça une boucle qui itère sur les fichiers et c'est bon! (t'oublie pas de bien fermer le test avec un fi tongue et c'est encore mieux)

Quelques remarques :
I) Sur la double condition (si ... ou ... alors) :
    1 - te poser la question : mes deux fichiers sont ils toujours présents? ça peut avoir des incidences sur la façon dont tu construit ta boucle (on pourra préciser si ce cas est avéré)
    2 - faire attention au fait que tu manipules une "liste" sur laquelle tu itères en même temps (que ce passe t'il si je déplace un fichier sur lequel je n'ai pas encore itéré?)

II) astuces :
    1 - même si mv évite pas mal de cata par rapport à rm, tu peux toujours créer l'inévitable (écrire sur le même nom de fichier à chaque tour de boucle par exemple (testé et non-approuvé). faire un p'tit test avec les echo en place des commandes peut être une bonne pratique.

Dernière modification par David5647 (19-04-2020 17:14:38)

Hors ligne

#11 19-04-2020 19:05:10

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : Supprimer un fichier orphelin

David5647 a écrit :

...

    1 - te poser la question : mes deux fichiers sont ils toujours présents? ça peut avoir des incidences sur la façon dont tu construit ta boucle (on pourra préciser si ce cas est avéré)



Oui oui, cette boucle sera sous cette condition et la commande :


if [[ "$COUNT_SID_FR" -ge "1" ]]; then
" Je lance ma commande d'extraction"
 



David5647 a écrit :

...
...
(écrire sur le même nom de fichier à chaque tour de boucle par exemple (testé et non-approuvé)



Je met le numéro de chaque titre sur les fichiers ("$n-vobsubs-fr.idx" et "$n-vobsubs-fr.sub") si c'est bien ce que tu veux dire

Dernière modification par golgot200 (19-04-2020 19:16:21)

Hors ligne

#12 19-04-2020 21:28:44

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Supprimer un fichier orphelin

golgot200 a écrit :

Je met le numéro de chaque titre sur les fichiers ("$n-vobsubs-fr.idx" et "$n-vobsubs-fr.sub") si c'est bien ce que tu veux dire


ce que je veux dire, c'est que j'ai déjà perdu des fichiers parcequ'à un moment, dans le petit script que j'avais produit,  ce "numéro" ne s'incrémentait pas correctement (pas du tout même)

Hors ligne

#13 19-04-2020 22:08:10

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : Supprimer un fichier orphelin

Ok je vois.

dis moi, j'ai un truc qui fonctionne mais pas beau avec shellcheck. Tu peux voir ça  smile :


FILEIDX=(*.idx)
FILESUB=(*.sub)

for i in "$FILEIDX"
do
taille_idx=$(stat -c%s "$FILEIDX")
 
  for j in "$FILESUB"
      do
taille_sub=$(stat -c%s "$FILESUB")

if [[ "$taille_idx" -gt 1000 ]] && [[ "$taille_sub" -gt 0 ]] ; then
echo "$i et $j sont bon"

  else

echo "$i ou $j est incorrect ... déplacement"

  fi
  done
done
 

Dernière modification par golgot200 (19-04-2020 22:14:18)

Hors ligne

#14 19-04-2020 23:45:00

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Supprimer un fichier orphelin

Bon, ça fonctionne pas chez moi tongue

1 - Un peu de présentation
==================


FILEIDX=(*.idx)
FILESUB=(*.sub)

for i in "$FILEIDX"; do

    taille_idx=$(stat -c%s "$FILEIDX")
   
    for j in "$FILESUB"; do
   
        taille_sub=$(stat -c%s "$FILESUB")
        if [[ "$taille_idx" -gt 1000 ]] && [[ "$taille_sub" -gt 0 ]] ; then
            echo "$i et $j sont bon"
        else
            echo "$i ou $j est incorrect ... déplacement"
        fi
       
    done
done
 

Un peu d'indentation pour plus de clarté

2 - syntaxe des boucles for
==================
La boucle ne fonctionne pas chez moi, mais comme ça, oui :

FILEIDX=*.idx
FILESUB=*.sub

for i in $FILEIDX; do

    for j in $FILESUB; do
        echo $i $j
   
    done
done

qui me donne pour les fichiers suivants :

test1.idx  test1.sub  test2.idx  test2.sub  test3.idx  test3.sub  test4.idx  test4.sub

ça:

test1.idx test1.sub
test1.idx test2.sub
test1.idx test3.sub
test1.idx test4.sub
test2.idx test1.sub
test2.idx test2.sub
test2.idx test3.sub
test2.idx test4.sub
test3.idx test1.sub
test3.idx test2.sub
test3.idx test3.sub
test3.idx test4.sub
test4.idx test1.sub
test4.idx test2.sub
test4.idx test3.sub
test4.idx test4.sub

Bon y a un problème non? on veut tester les couples 1.idx <=> 1.sub, 2.idx <=> 2.sub etc. et pas faire des tests croisés.

3 - Le parcours des fichiers
==================
Avec une seule boucle, on "itère sur le préfixe des nom de fichier" (ce qu'il y a avant le point)
en pratique:

FILEIDX=*.idx

for file in $FILEIDX; do # une seule boucle d'ou l'importance de bien avoir les 2 fichiers
    file_prefix=${file%.*} # ce qu'il y a avant le point :  fichier_1.blabla => fichier_1
   
    file_idx=$file
    file_sub="$file_prefix.sub" # on "analyse" 1.idx et 1.sub en même temps
    echo "$file_idx  $file_sub"


ce qui donne :

test1.idx  test1.sub
test2.idx  test2.sub
test3.idx  test3.sub
test4.idx  test4.sub

mieux non?

4 - La condition
===========
Pour quoi && et pas || ?


Voilà, ça devrait te permettre d'avancer

Dernière modification par David5647 (19-04-2020 23:47:05)

Hors ligne

#15 20-04-2020 00:07:18

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : Supprimer un fichier orphelin

C'est peut-être que je me suis arrangé dans mon script à ne traiter qu'une paire à la fois non ?  tongue

Dernière modification par golgot200 (20-04-2020 00:07:38)

Hors ligne

#16 20-04-2020 01:53:46

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Supprimer un fichier orphelin

golgot200 a écrit :

C'est peut-être que je me suis arrangé dans mon script à ne traiter qu'une paire à la fois non ?  tongue


Évidemment, je n'ai pas tout le contexte, mais les boucles, telles que décrites en #13, parcourent pour chaque .idx chaque .sub soit :

      n*n itérations  au lieu des  n itérations nécessaires avec n = nombre de fichier .idx = nombre de fichier .sub (et ça n'a même pas vraiment de sens de traiter 1.idx en même temps que 2.sub)
Et je ne vois pas bien comment contraindre ce comportement depuis l’extérieur de la boucle.


Si ce qu'il est sous-entendu derrière "à ne traiter qu'une paire à la fois" est qu'il existe déjà une boucle qui parcourt ces paires, alors, oui, seule la condition if à lieu d'être, alors, aucune boucle for n'est nécessaire.

Mais je ne suis pas sûr de vraiment saisir...

Hors ligne

#17 20-04-2020 11:07:04

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : Supprimer un fichier orphelin

Bonjour David5647

Merci pour ta patience et tes explication. Je viens d'arrivé à mes fins. J'ai donc fait un if avec les conditions dans une boucle. Comme je voulais garder au final tout les idx et sub ( même les paires non valides que je déplace illico pour ne pas les incorporer au mkv) Je test depuis ce matin mon script, c'est pas mal wink C'est vrai que j'ai pas mal bifurqué sur la demande initial du post mais le but est atteint pour moi.
Je voulais arriver à ça :


COUNT_SID_FR=$(echo "$SIDFR" |wc -w)

## AU MOINS UN SUB FRANÇAIS OU PLUS ( ON EXTRAIT TOUT ÇA ).
if [[ "$COUNT_SID_FR" -ge "1" ]]; then

mkdir -p "$TITLE/VOBSUBS/$i-$TITLE"

for n in $SIDFR; do mencoder -dvd-device "$DEVICE" dvdnav://"$i" -nosound -ovc frameno -force-avi-aspect "$RATIO" -o /dev/null \
               -ifo "/run/media/$USER/$TITLE/VIDEO_TS/VTS_01_0.IFO" -sid "$n" -vobsubout "$TITLE/$n-vobsubs-fr" -vobsuboutindex "$n"


taille_idx=$(stat -c%s "$TITLE/$n-vobsubs-fr.idx")
taille_sub=$(stat -c%s "$TITLE/$n-vobsubs-fr.sub")

if [[ "$taille_idx" -gt 1000 ]] && [[ "$taille_sub" -gt 0 ]] ; then

echo "$n-vobsubs-fr.idx et $n-vobsubs-fr.sub sont bon"

   else

echo "$n-vobsubs-fr.idx ou $n-vobsubs-fr.sub est incorrect ... déplacement"

   mv "$TITLE/$n-vobsubs-fr.idx" "$TITLE/$n-vobsubs-fr.sub" "$TITLE/VOBSUBS/$i-$TITLE"


fi


done          


   fi
 





├── [9,4M]  1-STARGATE_VC2-[Audio: fre,fre + Chapters + Sub: fre].mkv
├── [ 85M]  2-STARGATE_VC2-[Audio: en + Chapters + Sub: fre].mkv
├── [ 41M]  3-STARGATE_VC2-[Audio: en + Chapters NoSub].mkv
├── [ 19K]  IFOS
│   ├── [6,3K]  1-STARGATE_VC2-[Audio: fre,fre + Chapters + Sub: fre].log
│   ├── [4,5K]  2-STARGATE_VC2-[Audio: en + Chapters + Sub: fre].log
└── [2,1M]  VOBSUBS
    ├── [987K]  1-STARGATE_VC2
    │   ├── [ 801]  1-vobsubs-fr.idx
    │   ├── [ 22K]  1-vobsubs-fr.sub
    │   ├── [ 12K]  2-vobsubs-fr.idx
    │   └── [948K]  2-vobsubs-fr.sub
    ├── [1,1M]  2-STARGATE_VC2
    │   ├── [ 17K]  0-vobsubs-fr.idx
    │   └── [1,1M]  0-vobsubs-fr.sub
    └── [4,5K]  3-STARGATE_VC2
        ├── [ 535]  0-vobsubs-fr.idx
        └── [   0]  0-vobsubs-fr.sub

 137M used in 5 directories, 14 files

 




sur un travail de test qui se trouve là :

https://debian-facile.org/viewtopic.php?id=24453

En tout cas, encore merci pour l'aide smile

Dernière modification par golgot200 (20-04-2020 11:09:45)

Hors ligne

#18 20-04-2020 12:22:47

rodrigue7973
Membre
Lieu : beloeil
Distrib. : openSUSE Tumbleweed
(G)UI : gnome 40.0
Inscription : 19-11-2017
Site Web

Re : Supprimer un fichier orphelin

j'adoreuh stargate smile

Etant dyslexique, j'ai des problèmes quant à la rédaction de messages en français courant. Je vous prie dès lors d'accepter toutes mes excuses si mes interventions peuvent vous paraître étranges et je vous remercie d'avance pour votre compréhension.

Hors ligne

#19 20-04-2020 16:23:10

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Supprimer un fichier orphelin

golgot200 a écrit :

C'est vrai que j'ai pas mal bifurqué sur la demande initial du post mais le but est atteint pour moi.


Yep ça m'a ptetre un peu perdu, mais on y est arrivé big_smile

Il commence à être bien consistant ce code non?

Hors ligne

#20 21-04-2020 15:29:37

golgot200
Membre
Distrib. : Archlinux 2018-02-03
Noyau : 5.11.12-arch1-1
(G)UI : Mate (Strict Minimum)
Inscription : 05-08-2007

Re : Supprimer un fichier orphelin

David5647 a écrit :



Il commence à être bien consistant ce code non?



Oui, et de plus, j'ai pu mettre cette fichu option qui me fesait défaut dans mon script d'une autre manière.
Encore merci à toi wink

Hors ligne

Pied de page des forums