web-dev-qa-db-fra.com

Supprimer les espaces de début ou de fin dans les noms de fichiers ou de dossiers

J'ai mis au point un moyen simple de supprimer les fichiers en double. Vous savez, ceux qui contiennent "(1).", "(2).", "(3).", Etc. dans leurs noms. Dans une fenêtre de terminal, sur la ligne de commande, vous entrez "rm " [barre oblique inversée] ").", mais sans les guillemets. Ça va le faire. La [barre oblique inversée] "\" signifie que le caractère suivant est accepté uniquement en tant que caractère et ne fait pas partie d'une paire de parenthèses. Cela fonctionne quand rien d'autre ne le fera. Incidemment, j'ai essayé de taper le "\" dans la commande "rm", mais il n'a pas pu s'afficher correctement. J'ai donc placé le terme [barre oblique inversée] à la place.

L'apparition de "\" dans un dossier ou un nom de fichier indique également la présence d'un espace. L'utilisation d'espaces dans les noms n'est pas si courante, à moins que vous ne travailliez avec Windows. Windows ne fait que mettre entre "guillemets" le "chemin d'accès\nom de fichier". Vous pouvez le faire aussi dans Ubuntu, ou simplement coller une barre oblique inversée "\" devant l'espace. Mais que faire si vous souhaitez remplacer l’espace par un caractère différent? Comme un trait d'union ou un trait de soulignement? Comment feriez-vous cela pour tous les dossiers et fichiers à la fois?

Ou si vous décidiez de simplement supprimer les espaces, regroupez simplement le reste des personnages? Comment feriez-vous cela?

Et voici un problème: il suffit de se débarrasser de tout espace de début ou de fin. même s'il y a plus d'un cadeau.

Et pour terminer, comment détecter et supprimer les fichiers complètement vides. Ou des dossiers qui sont vides.

3
oldefoxx
  • Pour supprimer un nombre illimité d'espaces en début de fichier, vous pouvez utiliser rename (prename):

    rename -n 's/^ *//' *
    
  • Pour supprimer un nombre quelconque d'espaces de fin dans les noms de fichiers, vous pouvez utiliser rename (prename):

    rename -n 's/ *$//' *
    

    Supprimez -n (exécution à sec) si vous êtes satisfait du nom de fichier.

  • Pour supprimer des fichiers ou des dossiers vides (de manière récursive):

    find . -empty
    

    Satisfait? Laissez l'action se dérouler:

    find . -empty -delete
    

    Seulement dans le répertoire actuel:

    find . -maxdepth 1 -empty -delete
    

    Utilisez également -type f pour les fichiers uniquement et -type d pour les répertoires uniquement, si vous le souhaitez.

Lisez man rename et man find pour avoir plus d'idées.

11
heemayl

J'oublie souvent de rename. Voici comment faire avec plain bash:

$ touch "     leading spaces" "trailing spaces     "

$ printf ">%s<\n" *spaces*
>     leading spaces<
>trailing spaces     <

$ for f in *spaces*; do 
    new=${f##*([[:blank:]])}        # remove leading whitespace
    new=${new%%*([[:blank:]])}      # remove trailing whitespace
    mv "$f" "$new"
done

$ printf ">%s<\n" *spaces*
>leading spaces<
>trailing spaces<
3
glenn jackman

Pour supprimer des espaces, plusieurs approches ici: https://stackoverflow.com/questions/2709458/bash-script-to-replace-spaces-in-file-nameshttps: // stackoverflow.com/questions/15347843/remove-whitespaces-from-filenames-in-linux

Cette simple: "Entrez d'abord le répertoire avec cd: cd/my/directory puis exécutez: for f in *; do mv" $ f "echo $f | tr ' ' '_'; done"

Encore plus simple: "renommer" s/// g "*"

Pour se débarrasser des espaces, des traits de soulignement et des tirets: "renommer -i" s/[-_] // g "*"

Pour se débarrasser des fichiers de zéro octet: https://stackoverflow.com/questions/5475905/linux-delete-file-with-size-

Pour traiter des fichiers ou des dossiers vides, j’ai trouvé celui-ci: "Supprimer les fichiers vides (supprimer" echo "dans la commande): Code: find. -Empty -type f -print0 | xargs -0 echo rm Supprimer les répertoires vides (remove" echo 'dans la commande): Code: find. -empty -type d -print0 | xargs -0 echo rmdir " http://www.linuxquestions.org/questions/programming-9/bash-delete-empty -files-910203 /

Il semble étrange que j'ai répondu à ma propre question en l'espace d'une demi-heure, mais c'est la puissance d'un moteur de recherche si vous choisissez les bons mots sur lesquels chercher. Cependant, il existe des conditions générales qui ne donnent pas de réponses toutes faites, comme avec une autre question que j'avais posée ici l'autre jour. J'ai d'abord fait des recherches, je n'ai trouvé aucun résultat, je l'ai donc posté sur AskUbuntu. J'ai vérifié et toujours pas de réponse. Peut-être devra-t-il recommencer à faire des recherches, si je peux penser à quoi demander de plus.

0
oldefoxx