2016-04-11 11 views
0

Ich möchte ein Bash-Skript erstellen, um Videodateien in einem Verzeichnis zu überprüfen und diejenigen zu löschen, die bereits angesehen werden.Bash-Skript zum Löschen von Videos

Ich dachte über die Verwendung stat -c %w und stat -c %x und vergleichen Sie die Geburt und den letzten Zugriff auf das Video.

Ich habe stat -c %w verwendet, um das Datum der Dateierstellung zu bestimmen, aber ich bin unsicher von stat -c %x. Wann wird die Zugriffszeit aktualisiert? Wird es wirklich zeigen, wann das Video zuletzt geöffnet wurde? Gibt es noch andere Szenarien, die die Zugriffszeit ändern könnten?

Ein anderes Problem sind Dateien, die in einem Verzeichnis und nicht "nackt" im Arbeitsverzeichnis sind. Wie soll ich mit denen umgehen?

Haben Sie vielleicht eine bessere Lösung?

+0

Wäre es nicht eine bessere Idee, einen Video-Player zu verwenden, der die Zeiten eine Datei zählt hat gesehen worden? Mit stat können Sie nicht feststellen, ob der Film oder was auch immer angezeigt wurde. – aalf1987

+0

Ja, von diesem Problem bin ich mir bewusst, aber ich bin bereit, es zu akzeptieren. Ich nehme an, wir werden jedes Video beenden, das wir uns angeschaut haben. (Ich bin mir auch bewusst, wie optimistisch das ist :)) –

Antwort

0

finden auch fstat Systemaufruf verwendet.

-printf Option kann seit EPOCH verwendet werden, in Sekunden, um die Änderungszeit anzuzeigen (% T @) und die Zugriffszeit in Sekunden seit dem EPOCH (% A @) und die Dateinamen der einzelnen gefundenen Dateien.

Natürlich kann awk verwendet werden, um die Werte zu vergleichen und nur Dateinamen mit unterschiedlichen Zeiten zu drucken.

gibt diesen einen Versuch:

find . -type f -printf "%[email protected] %[email protected] %p\n" | awk '{if (substr($0,1,21)!=substr($0,23,21)) { print substr($0,45); }}' | xargs -I xxxx printf "%s\n" 'xxxx' 

Den Test der Version mit printf:

$ touch foo bar 
$ ls 
bar foo 

$ find . -type f -printf "%[email protected] %[email protected] %p\n" | awk '{if (substr($0,1,21)!=substr($0,23,21)) { print substr($0,45); }}' | xargs -I xxxx printf "%s\n" 'xxxx' 

$ cat foo 
$ find . -type f -printf "%[email protected] %[email protected] %p\n" | awk '{if (substr($0,1,21)!=substr($0,23,21)) { print substr($0,45); }}' | xargs -I xxxx printf "%s\n" 'xxxx' 
./foo 

find . -type f -printf "%[email protected] %[email protected] %p\n" | awk '{if (substr($0,1,21)!=substr($0,23,21)) { print substr($0,45); }}' | xargs -I xxxx rm 'xxxx' 

Vielleicht sollte es zuerst mit printf getestet werden

Hinweis: Dies ist aktiviert E-Liner-Befehl arbeitet mit Dateinamen, die Sonderzeichen nicht enthalten: \ n"' usw.

Verwandte Themen