J'ai un répertoire avec un groupe de fichiers avec des noms tels que: Je souhaite supprimer les zéros de premier plan de tous les noms de fichiers, donc je serais laissé avec: p > 1234.jpg
1235.jpg
4729342.jpg
8 Réponses :
Essayez d'utiliser SED CODE>, E.G.:
for f in `ls`; do
mv $f $(echo $f | sed -e 's:^0*::')
done
PO> P> sed -e 's:^0*::'
Ceci est probablement assez bon pour la situation de George, mais dans un environnement différent, on pourrait souhaiter gérer le cas particulier où le nom de fichier est tout zéro.
Il n'y a absolument aucune raison d'utiliser pour F dans `ls` code> au lieu du beaucoup plus sûr et plus efficace
pour F in * code>.
Peut-être pas le plus élégant mais cela fonctionnera.
for i in 0* do mv "${i}" "`expr "${i}" : '0*\(.*\)'`" done
Vos besoins de formatage fonctionnent. Utilisez 4 espaces avant «pour» pour faire la section complète une section codée.
Je ne connais pas du tout SED, mais vous pouvez obtenir une liste en utilisant Donc, avec l'autre réponse, cela pourrait ressembler à p>
Mais je ne sais pas si cette commande SED s'accumule ou non. P> trouver code>: p>
Trouver -Tepe f -Name * .jpg code> p>
trouver. -Type f -Name * .jpg | Sed -e 's: ^ 0 * ::' code> p>
for FILE in `ls`; do mv $FILE `echo $FILE | sed -e 's:^0*::'`; done
Vous n'avez pas besoin de (et ne devrait pas) utiliser ls code> comme ceci. Faites-le de cette façon:
pour fichier dans * code>
C'est un mauvais exemple. d'abord en utilisant LS, puis ne citez jamais vos variables
Je ne vois aucun problème avec l'utilisation de LS. Vous pouvez le substituer à la commande de recherche suggérée ci-dessous ou toute autre commande. Depuis que cela fonctionne, je ne vois pas vraiment quelles sont vos justifications autres que stylistiques, ce qui vient à une ligne des scripts shell semble un peu inutile.
* fera la bonne chose, ls code> ne sera parfois pas (par exemple si un fichier dispose d'un espace dans son nom, ce script ne fonctionnera pas).
Mon expérience n'a pas montré ce genre de comportement. Si vous spécifiez moi-même la liste, les articles devront être séparés par une pause à la ligne.
vérifier sed code> est le mauvais outil pour cela: vous devez également utiliser des scripts shell aussi bien.
J'aime cette commande, mais malheureusement, il n'est pas installé sur chaque système :(.
@Bryanh: ?? Ce n'est pas Wikipedia, je ne suis donc pas sûr de la raison de votre dessin animé XKCD. Ce que je pense que j'essayais de faire (je suppose - c'était il y a environ 18 mois) était que SED lui-même n'est pas en mesure de renommer des fichiers - vous auriez besoin de scripts supplémentaires pour y aller.
Peut confirmer que cela fonctionne avec l'outil code> renommer code> installé de Brew (Mac).
Voici celui qui ne nécessite pas Notez que cela ne fonctionne que lorsque les noms de fichiers sont tous des numéros. Vous pouvez également supprimer les zéros principaux à l'aide de la coque: p> SED code>:
in Bash, qui est susceptible d'être votre coquille de connexion par défaut, aucune commande externe n'est nécessaire.
shopt -s extglob for i in 0*[^0]; do mv "$i" "${i##*(0)}"; done
Dans Shell Bash, vous pouvez faire:
shopt -s nullglob for file in 0*.jpg do echo mv "$file" "${file##*0}" done
Remarque: cela rendra le tri plus difficile.
Avec GNU CARUETILILS,
LS -V CODE> Triera naturellement (à l'aide des extensions GLIBC
Versionsort (3) / StraveCMP (3) CODE>). Mais oui, en général, la modification des parties numériques des noms de fichiers pour ne plus aligner par la longueur ne modifie pas l'ordre de rassemblement normal.