Kopieren Sie die Dateien und benennen Sie sie nach Erstellungsdatum um

2

Ich habe ein paar Verzeichnisse (1 Ebene), die zu bestimmten Zeiten zu meinem Server hinzugefügt wurden. Das Problem ist, dass sie als zufälliger Hash bezeichnet werden.

Wäre es möglich, sie irgendwo zu kopieren und dabei bis zum ursprünglichen Erstellungsdatum des Verzeichnisses umzubenennen?

user1916182
quelle
Sehen Sie nach, ob dies Sie weiterbringt
TheUser1024

Antworten:

2

Wenn sich alle Ihre Verzeichnisse in befinden ~/foo, können Sie dies ausführen (vorausgesetzt, Sie möchten alles, was sich in befindet, umbenennen ~/foo):

cd ~/foo
for dir in *; do 
    t=`stat -c %y "$dir" | awk '{print $1"-"$2}' | 
       cut -d ":" -f 1,2 | sed 's/://'`
    mv "$dir" "$t"_"$dir";
done

Zum Beispiel:

$ ls -gG
total 20
drwxr-xr-x 2 4096 Jun 20 14:41 a
drwxr-xr-x 2 4096 Jun 21 14:40 b
drwxr-xr-x 2 4096 May 16 14:57 c
drwxr-xr-x 2 4096 Jun 21 14:33 d
drwxr-xr-x 2 4096 May  3 16:15 e
$ for dir in *; do 
    t=`stat -c %y "$dir" | awk '{print $1"-"$2}' | 
       cut -d ":" -f 1,2 | sed 's/://'`
    mv "$dir" "$t"_"$dir";
done
$ ls -gG
total 20
drwxr-xr-x 2 4096 May  3 16:15 2013-05-03-1615_e
drwxr-xr-x 2 4096 May 16 14:57 2013-05-16-1457_c
drwxr-xr-x 2 4096 Jun 20 14:41 2013-06-20-1441_a
drwxr-xr-x 2 4096 Jun 21 14:33 2013-06-21-1433_d
drwxr-xr-x 2 4096 Jun 21 14:40 2013-06-21-1440_b

Der Trick hier besteht statdarin, die Änderungszeit in einer Variablen zu speichern, $tdamit wir sie als Namen verwenden können. Wenn Sie die Änderungsdaten der Verzeichnisse beibehalten und nur den Namen ändern möchten, gehen Sie wie folgt vor:

for dir in *; do 
    old=`mktemp` && touch -r "$dir" $old
    t=`stat -c %y "$dir" | awk '{print $1"-"$2}' | 
       cut -d ":" -f 1,2 | sed 's/://'`
    mv "$dir" "$t"_"$dir"; 
    touch -r $old "$t"_"$dir";
done
terdon
quelle
Sollte das im Terminal funktionieren? Bitte schauen Sie sich meine Frage hier an.
geordie
@geordie nein, einige der Optionen hier sind unter OSX nicht verfügbar. Es ist sehr spät in meiner Zeitzone, aber ich werde versuchen, Ihnen morgen eine Antwort zu geben.
Terdon