1
votes

Comment supprimer tous les fichiers MP4 avec un nom de fichier ne se terminant pas par -converted?

J'ai converti / compressé plusieurs fichiers MP4 de plusieurs dossiers en utilisant VLC. Les noms des fichiers convertis / compressés se terminent par -converted, par exemple. 2. bulle sort-converti.mp4 .

Il est vraiment fastidieux d'aller dans chaque dossier et de supprimer tous les fichiers originaux et de laisser les fichiers convertis.

En utilisant une commande zsh / bash, j'aimerais supprimer récursivement tous les fichiers originaux et laisser les fichiers convertis. Par exemple, je supprimerai 3 - tri / 2. bubble sort.mp4 et quittera 3 - tri / 2. bulle sort-converti.mp4 .

TLDR; En termes simples, supprimez tous les fichiers avec l'extension .mp4 , où les noms de fichiers ne se terminent pas par -converted à l'aide d'une commande zsh / bash.

De plus, s'il existe un moyen de renommer le fichier converti avec le nom d'origine après avoir supprimé les fichiers d'origine, ce sera un plus.

Merci!


2 commentaires

Est-ce que cela répond à votre question? Supprimer les fichiers sauf ceux dont le nom correspond à une chaîne


J'ai lu la réponse à cette question, mais je suis un noob dans bash, donc je ne sais pas comment la modifier pour mon cas d'utilisation. Merci pour le partage!


4 Réponses :


2
votes

find peut être utilisé avec une expression logique pour faire correspondre les fichiers souhaités et les supprimer.

Dans votre cas, ce qui suit peut être utilisé pour vérifier s'il correspond aux fichiers que vous souhaitez supprimer. Il trouve tous les fichiers qui n'ont pas converti dans leurs noms mais se terminent par .mp4.

find . -type f -not \( -name '*converted*' \) -a -name "*.mp4" -delete

Une fois vous êtes satisfait du résultat de la liste de fichiers, puis ajoutez -delete pour effectuer la suppression réelle.

find . -type f -not \( -name '*converted*' \) -a -name "*.mp4"


0 commentaires

0
votes

Essayez ceci:

find . -name '*.mp4' | grep -v 'converted' | xargs rm -f


0 commentaires

0
votes

La solution pure zsh:

parallel --no-notice rm -rf ::: ^(*converted)(.)

Utilisation de gnu parallel (dans le cas de nombreux fichiers)

rm -f ^(*.mp4-converted)(.)

^ ................. negates
*-converted ....... pattern
(.) ............... regular files


0 commentaires

0
votes

Cela fonctionnera même si vos noms de fichiers contiennent ', "ou un espace:

find . -name '*.mp4' |
  grep -v 'converted' |
  parallel -X rm -f


0 commentaires