0
votes

Détecter et supprimer un espace de tête dans le nom de fichier ou de dossier

J'ai besoin de détecter et de supprimer beaucoup d'espaces de premier plan sur mes dossiers et fichiers.

J'essaie du code comme: xxx

mais je n'ai pas pu trouver aucun code pour supprimer un espace de tête du nom de fichier ou du dossier.

J'ai besoin de: xxx

(parce que j'utilise trouver des espaces de pointe sur Sub Dossiers)

Comment puis-je supprimer ces espaces de tête avec code que j'ai mentionné ci-dessus? Tout conseil aiderait. BTW, j'utilise Centos 7.


3 commentaires

Pouvez-vous clarifier si vous devez corriger les noms de dossiers, les noms de fichier ou les deux? Texte de la question implique uniquement le dossier, la solution implique tous les fichiers.


Désolé, mon erreur, en fait, je dois réparer les fichiers et les dossiers, et la solution peut faire les deux.


Vous recherchez toujours une solution ou heureuse avec une solution acceptée?


4 Réponses :


0
votes

Essayez ceci:

find /home/account -depth -name "* " | sed "s/\/ /\//g"


0 commentaires

1
votes

-Name "*" code> correspond à des noms de fichiers ayant traction forte> dans leurs noms. J'ai réparé que ci-dessous et utilisé -execdir code> pour faciliter la suppression plus facile d'éliminer les espaces de tête à l'aide des extensions de paramètres.

find /home/account -depth -name ' *' -execdir bash -c '
shopt -s extglob
for f; do
    mv -v "$f" "${f#./+([[:space:]])}"
done' _ {} +


1 commentaires

trouver "/ home / compte" -Depth -Name "*" -execDir sh -c 'pour f; faire mv -v "$ f" "$ {f #. / [[: espace:]]}"; fait '_ _ {} + ça marche merci ismail: D



-1
votes

Vous pouvez utiliser la substitution de bash pour extraire le nom du fichier et éliminer les espaces de premier plan.

Mineure Remarque: le modèle -Name "*" code> recherche un fichier avec un espace de fin. Si vous recherchez un filtre pour le (s) espace (s), utilisez -Name "*" code> ou pour n'importe quel espace que -Name "* *" code>. Le code exemple utilise un modèle d'espace de tête. Vous pouvez ajuster le modèle et les séquements au besoin. P>

find /home/account -depth -name " *" | while read fn ; do
   d=${fn%/*}
   b=$(echo "${fn##*/}" | sed -e 's/^ *//')
   mv "$fn" "$d/$b"
done


4 commentaires

Je ne sais pas combien de temps j'ai posté ce commentaire, mais il n'ya aucun point dans la lecture de la sortie de la lecture avec une boucle. Un nom de fichier avec des caractères ambiguës de ceci briserait ceci. Et aussi, il s'agit également d'une utilisation inutile de SED; BASH prend en charge toutes les expressions de paramètre POSIX Plus EXTRUGLOBS, REMPLACEMENT ETC.; Ainsi, il peut gérer de telles modifications triviales avec des fonctions internes


Bien que je suis d'accord avec le but faisant tous les scripts anti-bullet, il n'est pas toujours pratique (et la vaut la peine) de faire preuve de chaque script et une doublure à prendre en charge les cas les plus complexes et les plus peu fréquents (nouvelles lignes du nom de fichier, etc.).


Pourtant, de telles réponses pourraient être trompeuses pour les téléspectateurs futurs. Au moins, ajoutez une déclaration indiquant que cette réponse ne fonctionnera pas sur des cas de bord la prochaine fois.


Opinion personnelle: Vous pouvez installer la barre trop élevée. Numérisation rapide des réponses récentes (y compris les principaux contributeurs) montrent de nombreux modèles risqués étant suggéré, y compris des problèmes tels que «RM *» (qui peuvent être maltraités à «RM -R» lorsque des fichiers commencent par «- '), Similaire Trouver / Xargs et Trouver / lire des problèmes, sans parler d'erreur de syntaxe, etc. Je pense que c'est un choix personnel que chaque contributeur apportera, en fonction du contexte, etc. Devoir inclure une longue liste de responsabilité de non-responsabilité, des avertissements sur chaque réponse n'est pas la voie à suivre va. Cependant, c'est probablement une bonne discussion pour le «débordement de la pile méta» »



0
votes

Utiliser renommer

  • -Name "*" : correspond aux noms de fichiers ayant des espaces de fuite dans leurs noms
  • renommé 's / // gi' : Remplacez l'espace sans rien

    -> xxx


2 commentaires

J'ai essayé d'utiliser Renommer, mais le défi consiste à remplacer les espaces principaux du nom du fichier. Je crois que la solution proposée remplacera tous les espaces dans le répertoire et le nom de fichier.


Recherchez uniquement des fichiers non des répertoires, utilisez cette commande: trouver. -Depth -type f -Name "* *" | Renommer 's / // gi'