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
Antwort
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 \;
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
@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. –
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
- 1. Zeile in die nächsten leeren Zeilen kopieren, falls vorhanden
- 2. Bedingtes Join, falls vorhanden
- 3. falls vorhanden beenden Sie dann VBS
- 4. Ein Liner zum Festlegen der Umgebungsvariablen, falls nicht vorhanden, sonst anhängen
- 5. Orakel-Drop-Index, falls vorhanden
- 6. Google Cloud Storage - GSUtil - Dateien kopieren, bestehende überspringen, nicht überschreiben
- 7. Schließen QDialog (falls vorhanden) in pyside
- 8. java überspringen, wenn sonst Anweisung
- 9. Bash: Kopieren von Dateien rekursiv genannt, Ordnerstruktur
- 10. aktualisieren, falls nicht vorhanden, falls vorhanden zu überprüfen, ob Code von 1 verschieden ist und aktualisieren
- 11. wenn sonst in Dividieren BASH
- 12. Jquery: idiomatische Möglichkeit, Element A zu wählen, falls vorhanden, Element B sonst?
- 13. Inhalt von einer Datei in eine andere Datei kopieren (überschreiben, falls vorhanden)
- 14. Netezza Tabelle erstellen, falls nicht vorhanden
- 15. bash nicht eingeben sonst
- 16. Bash Script, um n Dateien zu kopieren und sequenziell umzubenennen
- 17. Kopieren Sie mehrere Dateien aus einem Freigabeordner in andere Ordnerfreigabe
- 18. Django-Modell erstellen oder aktualisieren, falls vorhanden
- 19. C# Bulk Insert SqlBulkCopy - Update falls vorhanden
- 20. Dateien kopieren, die vollständig sind?
- 21. Kopieren von Dateien in benannte Verzeichnisse in bash
- 22. Bash: finden und kopieren
- 23. In Tabelle einfügen, wenn keine ID vorhanden ist, sonst
- 24. Grep Qstat Ausgabe und kopieren Sie die Dateien einmal fertig
- 25. Welche Rolle haben ActiveRecord-Modellkonstruktoren in Rails (falls vorhanden)?
- 26. iOS: App mit benutzerdefinierter URL öffnen, falls installiert, itunes sonst
- 27. ansible: Überprüfen Sie, ob Dateien vorhanden sind und kopieren Sie sie
- 28. Suchzeichenkette, falls nicht vorhanden, finde eine andere Zeichenkette
- 29. Java File.listFiles() gibt Dateien, die Sie 'nicht vorhanden' nach `existiert()`
- 30. Bash wenn sonst und Variablenzuweisung
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
@Derlin, es ist eine GNU-Erweiterung; Überprüfen Sie die Manpage für "-newerXY". –
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). –