bash l'ablation d'une partie d'un nom de fichier
J'ai les fichiers suivants dans le format suivant:
$ ls CombinedReports_LLL-*'('*.csv
CombinedReports_LLL-20140211144020(Untitled_1).csv
CombinedReports_LLL-20140211144020(Untitled_11).csv
CombinedReports_LLL-20140211144020(Untitled_110).csv
CombinedReports_LLL-20140211144020(Untitled_111).csv
CombinedReports_LLL-20140211144020(Untitled_12).csv
CombinedReports_LLL-20140211144020(Untitled_13).csv
CombinedReports_LLL-20140211144020(Untitled_14).csv
CombinedReports_LLL-20140211144020(Untitled_15).csv
CombinedReports_LLL-20140211144020(Untitled_16).csv
CombinedReports_LLL-20140211144020(Untitled_17).csv
CombinedReports_LLL-20140211144020(Untitled_18).csv
CombinedReports_LLL-20140211144020(Untitled_19).csv
Je voudrais que cette partie supprimée:
20140211144020
(c'est le timestamp les rapports ont été exécutés afin de varier)
et se retrouver avec quelque chose comme:
CombinedReports_LLL-(Untitled_1).csv
CombinedReports_LLL-(Untitled_11).csv
CombinedReports_LLL-(Untitled_110).csv
CombinedReports_LLL-(Untitled_111).csv
CombinedReports_LLL-(Untitled_12).csv
CombinedReports_LLL-(Untitled_13).csv
CombinedReports_LLL-(Untitled_14).csv
CombinedReports_LLL-(Untitled_15).csv
CombinedReports_LLL-(Untitled_16).csv
CombinedReports_LLL-(Untitled_17).csv
CombinedReports_LLL-(Untitled_18).csv
CombinedReports_LLL-(Untitled_19).csv
Je pensais simplement le long de la lignes de la mv de commande, peut-être quelque chose comme ceci:
$ ls CombinedReports_LLL-*'('*.csv
mais peut-être un sed commande ou un autre serait mieux
- Double Possible de la suppression d'une partie du nom de fichier d'un tas de fichiers.
Vous devez vous connecter pour publier un commentaire.
rename
fait partie de laperl
paquet. Il renomme les fichiers en fonction de perl-style expressions régulières. Pour supprimer les dates de vos noms de fichier:Si
rename
n'est pas disponible,sed
+shell
peut être utilisé:Au-dessus de la boucle sur chacune de vos fichiers. Pour chaque fichier, il effectue un
mv
commande:mv "$fname" "$(echo "$fname" | sed -r 's/[0-9]{14}//')"
où, dans ce cas,sed
est en mesure d'utiliser la même expression régulière commerename
commande ci-dessus.s/[0-9]{14}//
ditsed
de rechercher 14 chiffres dans une rangée et de les remplacer par une chaîne vide.BASH_REMATCH
), et a un mode dans lequel le son globules sont comparables en puissance de BREs (voirextglob
).$(foo)
, caractères de fin deIFS
sont dépouillés, si un nom de fichier se terminant par une espace aurait que des espaces dépouillés, même si ce n'est pas le comportement souhaité.rename
peut fonctionne un peu différente de celle décrite par @John1024:rename from to files
. Et avec les mêmes exemples:rename 20140211144020 '' CombinedReports_LLL-*'('*.csv
rename
. Lerename
discuté dans cette réponse, comme mentionné dans la première phrase de la réponse, est la version qui vient avec le perl package. Le perl est la version par défaut sur debian-like systèmes. Vous avez peut-être décrire la version qui vient dans le cadre de lautil-linux
paquet.Sans utiliser d'autres outils comme
rename
oused
et coller strictement àbash
seul:mv -i "$f" "${f/LLL-*\(/LLL-(}"
newName
.LLL
est répété, ou l'ouverture de la deuxième tranche.man bash
et de recherche pourPattern substitution
.Vous pouvez essayer ligne par ligne sur l'enveloppe:
0
,20
,34
, et500
) et ce qu'ils signifient. Il n'est pas impossible à deviner, bien sûr, mais ce n'est pas la façon la plus claire à la mettre soit.Vous pouvez utiliser le
rename
utilité pour cela. Il utilise la syntaxe un peu comme sed pour modifier les noms de fichiers. L'exemple suivant (à partir de la renommer l'homme-page) montre comment supprimer la fin '.bak' extension à partir d'une liste de fichiers de sauvegarde dans le répertoire local:rename
commande dans ma version de cygwin à la minute. d'une autre manière?Je suis en utilisant les conseils donnés dans le haut de réponse et ont mis la ligne suivante dans un shell script:
Dans le terminal, cette ligne fonctionne parfaitement, mais dans mon script il n'exécutera pas et lit * comme un littéral partie du nom de fichier.