Benennen Sie Dateien basierend auf einem Teil einer Datei um
1416
random
Wie benenne ich 2009-08-2009-08-13 in 2009-08- $ my_var_till_2009-08-13 für mehrere Dateien um? Der 2009-08-13-Teil ändert sich in Bezug auf das Datum der Datei, daher brauche ich eine Möglichkeit, diesen Teil des Dateinamens zu erfassen. Könnte ich basename irgendwie verwenden?
auf welchem Betriebssystem?
John T vor 15 Jahren
1
Ich führe dies auf einem Linux-Betriebssystem aus
vor 15 Jahren
0
Wenn die Dateinamen immer in diesem Datumsformat vorliegen, denke ich, dass so etwas (in einem Skript) funktionieren würde - dies setzt natürlich voraus, dass sich alle im selben Verzeichnis befinden und '$ my_var_till' in der Shell definiert ist :
#!/bin/bash cd <name_of_target_directory> for i in `ls` do yyyy=`echo $i | awk -F- '`' mm=`echo $i | awk -F- ''` dd=`echo $i | awk -F- ''` mv $i "$yyyy-$mm-$my_var_till-$yyyy-$mm-$dd" done
Wenn '$ my_var_till' nicht in der Shell definiert ist, können Sie es als Befehlszeilenargument verwenden (natürlich möchten Sie vielleicht eine Fehlerüberprüfung mit dem Argument hinzufügen):
#!/bin/bash my_var_till=$1 <continue on with code from above>
1
apricot boy
Wenn Sie das Dienstprogramm haben rename(es gibt mehrere davon, denke ich, habe ich die Perl-Version):
Dieses -nFlag bedeutet, dass renamekeine Dateien geändert werden, sondern nur die Änderungen angezeigt werden. Entfernen Sie es, um die Dateien umzubenennen.
Wenn Sie unter Linux mehrere Dateien umbenennen oder verschieben müssen, wird der Befehl mmv shell Ihnen das Leben erleichtern. Das Dienstprogramm mmv eignet sich auch zum Kopieren mehrerer Dateien, zum Anhängen des Inhalts einer Datei an andere Dateien sowie zum Erstellen von Links.
0
Kevin Fegan
Dieses Skript benennt alle Dateien mit einem Namen wie um
this: 2009-08-2009-08-13 to: 2009-08-$_2009-08-13
Wenn zum Beispiel my_var_till="whatever"und dateiname = "2009-08-2009-08-13", lautet das Ergebnis:
Dateien mit Namen, die nicht in diesem Format vorliegen, werden übersprungen.
Versuche dies:
#!/bin/bash my_var_till="whatever" for f in * # test if file is proper format echo "$"|grep -E '^[0-9]-[0-9]-[0-9]-[0-9]-[0-9]$'>/dev/null if [ $? -eq 0 ]; then n=$(echo $|sed -r 's/^(.)(.)$/'"\1$_\2/") mv "$" "$" fi done
-1
John T
Linux:
obligatorischer 1-Liner ...
for i in `ls`;do echo $i | awk -F- '';done
erweitert
#!/bin/bash my_var_till=somevalue # can replace with $1 to use command-line arg to script for i in `ls` do echo $i | awk -F- '' done
Sie können auch den renameBefehl verwenden und einen Perl-Regex angeben.
Angenommen, Ihre Variable ist eine Variable, die Sie in der Shell festgelegt haben.