Question:
Supprimer en masse le caractère des noms de fichiers et des noms de dossiers
FastSolutions
2014-09-28 15:09:36 UTC
view on stackexchange narkive permalink

Nous avons créé de nombreux dossiers et fichiers contenant le caractère "<".

Est-il possible de supprimer en masse ces caractères?

Six réponses:
#1
+16
l'L'l
2014-09-28 18:41:42 UTC
view on stackexchange narkive permalink

Vous pouvez le faire assez simplement et rapidement dans le Terminal:

cd / chemin / vers / démarrer / renommer

  find. -nom '* \ < *' | tandis que lu f; do echo mv "$ f" "$ {f // \ < /}"; done  

La commande ci-dessus est une "exécution à sec" de la commande ci-dessous:

  find. -nom '* \ < *' | tandis que lu f; faire mv "$ f" "$ {f // \ < /}"; done  

Ceci supprimera tous les caractères < de manière récursive sur les fichiers et les dossiers en commençant par le chemin d'accès dans lequel vous vous êtes rendu initialement.

Résultat:

  mv ./<folder<test< ./foldertestmv ./<test3.txt ./test3.txtmv ./test2<.txt ./test2<.txt ./test2.test. / pré>
Est-il possible que cette commande prenne un certain temps? Je fais le run-run et il n'y a pas de sortie après 5 minutes?
@Vinozio, Combien de répertoires analysez-vous? Il devrait être presque instantané, voire multiple. Si vous commencez par `/` par exemple, cela peut prendre un certain temps. Essayez d'utiliser la commande dans un répertoire où vous savez qu'il y a un fichier / dossier avec le `<` dans le nom et voyez ce qu'il fait.
C'est sur un NAS, avec 250 Go de données.
Si vous commencez à la racine, alors oui, cela peut prendre un peu de temps. Je le teste généralement sur un répertoire dont je sais qu'il contient un élément correspondant, puis si tout semble bon, exécutez la commande de plus haut (et faites une promenade si nécessaire).
Cela a supprimé mes fichiers ...
@PubliDesign: mv ne supprime pas les fichiers, il les déplace;avec n'importe quelle commande dans le terminal, sachez ce que vous faites et les risques de telles choses à l'avance.La première commande affichée est une "exécution à sec", ce qui signifie que vous devriez avoir exécuté cela en premier pour être certain de ce qu'il fait, car il ne touche aucun fichier.Si vous écrasez vos fichiers d'une manière ou d'une autre, ce n'est la faute de personne d'autre que de la vôtre ...
@l'L'l Je suis conscient des risques.La ligne d'origine n'a rien fait (pas même un résultat vide), j'ai dû tuer la commande.Lorsque j'ai exécuté la commande réelle, aucune erreur et les fichiers ne sont nulle part à aucun niveau parent.Et votre ton condescendant n'est ni nécessaire ni utile.
@davewoodhall: Pensez-vous réellement que "Ceci a supprimé mes fichiers" est utile?- vous les avez supprimés, prenez vos responsabilités peut-être!Cette question a reçu une réponse il y a près de trois ans, compte près de 10 000 vues et personne d'autre ne semble se plaindre de quelque chose de similaire.Malheureusement, je dirais que vous vous êtes trompé quelque part en cours de route, désolé ...
@user1401141, Pour répondre à votre question (supprimée), "Mais comment pouvez-vous le restreindre pour ne changer que les noms de répertoire (pas les fichiers)?", Ajoutez le `-type d` _option_ à la _commande_` find`, par exemple`trouver.-type d -nom '* \ <*' |tandis que lu f;do echo mv "$ f" "$ {f // \
#2
+4
Dave Nelson
2014-09-28 15:38:18 UTC
view on stackexchange narkive permalink

J'utilise Name Mangler 3 pour renommer les fichiers et les dossiers. Il existe des options gratuites, mais Name Mangler offre une tonne de fonctionnalités qui valent largement les 19,00 $ pour moi.

Voici Name Mangler sur MacUpdate qui comprend des liens vers de nombreux programmes similaires.

  1. Une fois que vous avez installé Name Mangler, lancez-le
  2. Faites glisser tous les dossiers que vous souhaitez renommer dans le panneau où il est indiqué "Faites glisser les fichiers et les dossiers ici "
  3. Sur la droite, choisissez" Rechercher et remplacer "
  4. Entrez" < "
  5. Sous" Remplacer par ", entrez le caractère que vous souhaitez remplacer" < " avec ou laissez vide pour le supprimer
  6. Cliquez sur "Renommer x de x éléments"

Une des nombreuses choses qui rend l'utilisation d'un outil comme Name Mangler utile est que vous peut annuler vos modifications, afficher un historique de vos modifications et créer un "droplet" qui rend l'exécution du changement de nom sur d'autres fichiers très pratique. Tout cela en plus de pouvoir utiliser Regex pour créer des noms très compliqués.

Il existe également un excellent Groupe Google Name Mangler où vous pouvez obtenir des réponses à vos questions et des fonctionnalités très avancées et les méthodes sont discutées. Ils m'ont beaucoup aidé.

Je vais essayer ça, tiens bon!
J'ai trouvé cette application très utile pour changer de fichiers et de dossiers! Merci!
#3
+1
Trane Francks
2014-09-28 15:26:27 UTC
view on stackexchange narkive permalink

Vous pouvez facilement le faire avec un script shell (gratuit), par exemple:

 ! # / bin / kshpour fileirname dans `ls -1 * \ < *` # Remarque ls -1 (un) pas l'alphabet Ldo NEW_NAME = $ (echo "$ fileirname" | sed 's / \ < // g') mv "$ fileirname" "$ NEW_NAME" echo "Changement de nom de $ fileirname à: $ NEW_NAME" terminé  
le `-1` n'est pas vraiment nécessaire (ls crée de toute façon une sortie de colonne unique si la sortie n'est pas envoyée à un écran), également` for f in * \ <*; do` devrait également fonctionner.
#4
+1
Tetsujin
2014-09-28 15:28:06 UTC
view on stackexchange narkive permalink

Cela peut être fait avec shellscript ou Automator, mais peut-être NameChanger pourrait être l'option la plus simple, c'est donationware - NameChanger-MRRSoftware

#5
+1
kojow7
2019-11-10 09:06:44 UTC
view on stackexchange narkive permalink

En tant que modification de la réponse de I'L'I, pour remplacer un caractère par un trait de soulignement (ou quelle que soit votre préférence), vous pouvez utiliser:

  trouver. -nom '* \ < *' | tandis que lu f; do echo mv "$ f" "$ {f // \ < / _}"; terminé
 

La commande ci-dessus est une "exécution à sec" de la commande ci-dessous:

  trouver. -nom '* \ < *' | tandis que lu f; faire mv "$ f" "$ {f // \ < / _}"; terminé
 

Note 1: Vous pouvez remplacer le _ par le caractère de votre choix.

Note 2: Parce que le "<" est un caractère spécial, vous devez remplacer placez le caractère d'échappement \ devant lui. Si vous essayez de remplacer un caractère différent tel que deux-points : , vous n’avez pas besoin du \ devant lui. (La barre oblique inverse apparaît deux fois sur chaque ligne ci-dessus).

Note 3: Assurez-vous d'essayer d'abord le test à sec au cas où quelque chose ne serait pas tout à fait correct. Assurez-vous également de sauvegarder vos fichiers au préalable au cas où vous auriez mal saisi quelque chose.

#6
+1
fusion27
2020-04-08 22:51:38 UTC
view on stackexchange narkive permalink

Ce qui a fonctionné pour moi - noms de fichiers uniquement

  • Je suis attirée par les solutions terminales car c'est gratuit et je me suis convaincu que je marque des points de style.
  • Je n'avais pas besoin de supprimer tous les caractères spéciaux, je n'avais à gérer que ..., *, (,), @ et les traits de soulignement de début _ dansun répertoire unique.

  cd / chemin / vers / dossier / avec / offending / filenames /
pour fichier en ./*
  faire mv "$ fichier" "$ {fichier // ([* \ (\) @ _ $] | \. \. \.) /}"
terminé
 


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...