2016-11-29 5 views
-1

Ich möchte zuerst überprüfen, ob die Datei an meinem Quellort in einen Datumsbereich fällt: Wenn ja, dann kopiere sonst überspringe und überprüfe die nächste Datei. Kann jemand helfen, wie dies getan werden kann, wie ich zum Shell-Skript neu bin.Kopieren Sie die Dateien, falls vorhanden sonst in bash überspringen

+0

Ich verstehe nicht, Ihr Skript. Was sind die Parameter von -wnrmt zu finden? Ist das Datum Teil des Dateinamens oder suchen Sie nach dem Datum der letzten Änderung? – Derlin

+0

@Derlin, es ist eine GNU-Erweiterung; Überprüfen Sie die Manpage für "-newerXY". –

+1

Beachten Sie, dass 'find' keine Dateien findet, die nicht existieren. Sie können Verzeichnisse (etc) durch Hinzufügen von "-type f" ausschließen, so dass nur Dateien gefunden werden. Ihre Schreibweise mit dem Zitat ist falsch. Die Verwendung der For-Notation funktioniert nur, wenn die Dateinamen keine Leerzeichen (oder Tabulatoren oder Zeilenumbrüche) enthalten. Denken Sie daran, Verwendungen von Variablen zu zitieren; Denken Sie daran, den Datumsvariablen ein '$' voran zu stellen. Im Allgemeinen erhalten Sie die besten Antworten, wenn Ihr Code ein wenig funktioniert - Ihres wird nicht ausgeführt (ungültige Syntax). –

Antwort

2

find gibt bereits nur Einträge zurück, die bereits existieren; Es gibt kein Problem dort, aber der Code, den Sie verwenden, um über seine Ergebnisse zu iterieren, ist stark beschädigt.


Das Problem hier ist nicht mit Skipping, aber mit dem richtigen Syntax im Allgemeinen und (sekundär) mit Praktiken Korrektheit bezogen. Selbst wenn Sie den unmittelbarsten Fehler im ursprünglichen Code behoben haben, wären Sie in Konflikt mit BashPitfalls #1 und DontReadLinesWithFor geraten.

Siehe UsingFind für eine vollständige Diskussion der besten Praktiken rund um die Verwendung von find. Das heißt, unter die richtigen Ansätze sind:

#!/bin/bash 
#  ^^^- important: not /bin/sh 

while IFS= read -r -d '' filename; do 
    mv "$filename" /to_path 
done < <(find filedirectory_path/ -type f -newermt "$date1" ! -newermt "$date2" -print0) 

... oder ...

find filedirectory_path/ -type f -newermt "$date1" ! -newermt "$date2" -exec mv '{}' /to_path \; 
+0

Danke, aber das Stück Code, das ich geteilt habe, ist nur ein Bild von dem, was ich tun muss. Ich bin ziemlich schlecht im Scripting :) – Ray

+2

@Ray: zeig uns nicht 'ein Bild von dem, was ich tun muss'. Zeigen Sie Code, der ernsthaft versucht, das zu tun, was Sie tun müssen. Wenn Sie uns die Mühe machen, Ihre Frage zu beantworten, sollten Sie zumindest versuchen, anständigen Code zu präsentieren. Es ist wirklich unhöflich, etwas anderes zu tun. –

+0

Ich wollte nicht unhöflich sein. Ich schätze, ich bin zu schlecht beim Shell-Scripting, um sogar einen syntaktisch korrekten Code zu schreiben :( – Ray

Verwandte Themen