Arbeiten mit Dateien und Verzeichnissen im Terminal
Im folgenden die wichtigsten Commands für das Arbeiten mit Dateien und Verzeichnissen im Terminal.
cp
cp ist ein Hilfstool zum kopieren von Dateien
Optionen
Option | Beschreibung |
---|---|
-a oder --archive |
Beibehaltung von Besitzer-, Gruppen- und Zugriffsrechten und Erstellungs-, Modifizierungs- und Zugriffsdaten (entspricht -dR –preserve=all) |
-b oder --backup |
Sichert Dateien vor dem Überschreiben, wenn diese unterschiedlich sind |
-d |
erhält symbolische Links, folgt ihnen aber nicht beim Kopieren (entspricht -P --preserve=links ) |
-i oder --interactive |
fragt vor Überschreiben nach |
-l oder --link |
kopiert nicht, sondern erstellt harten Link |
-n oder --no-clobber |
niemals vorhandene Dateien überschreiben (=-i wird wirkungslos=) |
-p (klein) oder --preserve=mode,ownership,timestamps |
erhält Standard-Dateiattribute wie Zeitpunkt des letzten Schreibzugriffs |
-P (groß) oder --no-dereference |
Symbolische Links als symbolische Links kopieren, statt den Links in der Quelle zu folgen |
-r oder -R oder --recursive |
Verzeichnisse rekursiv kopieren (Unterverzeichnisse eingeschlossen) |
-s oder --symbolic-link |
kopiert nicht, sondern erstellt symbolischen Link |
-u oder --update |
kopiert nur, wenn Zieldatei älter als Quelldatei |
-v oder --verbose |
Durchgeführte Tätigkeiten “erklären” / anzeigen |
Beispiele
Dateien mit bestimmtem Anfangsbuchstaben da*.txt, do*.odt kopieren, wenn neuer als bestehende, und Kopierfortschritt anzeigen:
cp -uv da*.txt do*.odt /home/BENUTZER/Dokumente
Zeigt, welche Datei im Moment kopiert wird:
lsof -ad3-999 -c cp
mv
Verschieben von Dateien/Verzeichnissen
Optionen
Option | |
---|---|
-i oder --interactive |
fragt vor dem Überschreiben nach |
-u oder --update |
verschiebt nur wenn Zieldatei älter |
-v oder --verbose |
zeigt Verschiebe-Fortschritt an |
Beispiele
Umbenennen einer Datei am gleichen Ort:
mv datei_a.txt datei_b.txt
Vershieben aller Dateien mit einer Bestimmten Endung:
mv *.txt /path/to/target/folder
# oder
mv /path/to/source/folder/*.txt /path/to/target/folder
Verzeichnis umbenennen:
# im gleichen Verzeichnis
mv ordner1 ordner2
Zeigt, welche Datei im Moment verschoben/umbenannt wird:
lsof -ad3-999 -c mv
find
Optionen
Kriterium | Beschreibung |
---|---|
-name DATEI | sucht nach dem Namen DATEI. Werden Platzhalter verwendet, müssen sie maskiert werden, sonst interpretiert sie schon die Shell. Beispiele: \*.txt oder "???.t*xt" |
-iname DATEI | sucht nach dem Namen DATEI, ohne Beachtung der Groß- und Kleinschreibung. |
-type T | sucht nach nur einem Typ, z.B. mit f (=file) echte Dateien oder mit d (=directory) Verzeichnisse. |
-mtime n | sucht nach Dateien, deren Inhalt vor n bis n+1 Tagen geändert (m=modified) wurde. |
-mtime +n | sucht nach Dateien, deren Inhalt älter als n+1 Tage ist. |
-mtime -n | sucht nach Dateien, deren Inhalt jünger als n Tage ist. |
-ctime n | sucht nach Dateien, deren Name oder Status (Modus, Besitzer oder Gruppe) vor n bis n+1 Tagen geändert (c=changed) wurde. |
-atime n | sucht nach Dateien, auf die zuletzt vor n bis n+1 Tagen zugegriffen (a=accessed) wurde. (Hinweis: Die Aussagekraft der Datei-Zugriffszeit ist stark von den Einhängeoptionen atime, |
noatime und relatime abhängig.) | |
-mmin n | sucht nach Dateien, deren Inhalt vor n-1 bis n Minuten geändert wurde. (Achtung: andere Zählweise als bei -Xtime) |
-mmin +n | sucht nach Dateien, deren Inhalt älter als n Minuten ist. (Achtung: andere Zählweise als bei -Xtime) |
-mmin -n | sucht nach Dateien, deren Inhalt jünger als n Minuten ist. (gleiche Zählweise als bei -Xtime) |
-daystart | misst für alle darauf folgenden -Xtime- und -Xmin-Kriterien ab 0:00 h des nächsten Tages, also ab Mitternacht. |
-newer DATEI | sucht nach Dateien, deren Inhalt nach dem von DATEI verändert wurde. |
-size n[cwbkMG] | sucht Dateien die n Zuordnungseinheiten belegen. Folgende Multiplikatoren können zusätzlich verwendet werden: c für Bytes, w für Zwei-Byte-Wörter, b für 512-Byte-Blöcke (Standard), |
k für KiB (Kibibyte), M für MiB, G für GiB. | |
-user BENUTZER | sucht nur nach Dateien des Benutzers BENUTZER. |
-nouser | sucht nach Dateien, deren User-ID keinem Benutzer entspricht. |
-nogroup | sucht nach Dateien, deren Gruppen-ID keiner Gruppe entspricht. |
-maxdepth n | sucht ab dem Startpunkt nur n Verzeichnisse tief. Bezeichnet dieser ein Verzeichnis – z.B. implizit das aktuelle Verzeichnis – zählen dessen Einträge schon zu Tiefe 1. |
-depth | sucht erst rekursiv im Inhalt der Verzeichnisse, bevor das Verzeichnis selbst untersucht wird. (Standard bei -delete Aktion) |
Typische Aktionen für find
Aktion | Beschreibung |
---|---|
-fprint DATEI | gibt die gefunden Dateinamen nicht auf die Standardausgabe (Bildschirm) aus, sondern schreibt diese in die Datei DATEI. |
-exec KOMMANDO {} ; | wendet auf alle Funde den Shellbefehl KOMMANDO an. {} steht dabei als Platzhalter für die gefundenen Dateinamen. Das Zeichen ; terminiert den von find |
aufzurufenden Shellbefehl. Damit es nicht unbeabsichtigt von der Shell interpretiert wird, muss es mit \ oder zwei umschließenden " maskiert werden. | |
-execdir KOMMANDO {} + | wendet auf die Funde den Shellbefehl KOMMANDO an. Im Gegensatz zu -exec wird das Kommando im Verzeichnis, in dem die Datei liegt, ausgeführt. Das + bewirkt, dass |
viele Funde (bzw. hier viele eines gleichen Verzeichnisses) auf einmal an KOMMANDO übergeben werden, was die Ausführung stark beschleunigen kann. | |
Das + kann statt dem ; (ebenso wie bei -exec) nur verwendet werden, wenn {} der letzte Parameter von KOMMANDO ist. |
|
-ok KOMMANDO {} ; | Wie -exec , allerdings wird vor jeder Aktion eine Bestätigung erfragt. {} steht dabei als Platzhalter für die Funde. |
-okdir KOMMANDO {} + | Wie eine Kombination von -ok und -execdir, d.h. es wird eine Bestätigung erfragt, und das Kommando wird im Fundordner ausgeführt. |
erzwingt die Ausgabe der gefunden Dateinamen, auch wenn diese als Parameter für eine andere Aktion zunächst verschluckt wurden. | |
Mit -printf FORMAT kann die Ausgabe auch vielfältig gestaltet werden. | |
-delete | löscht die gefundenen Dateien und leeren Verzeichnisse. |
Beispiele
zeigt alle Dateien/Verzeichnisse an, die einen Part /folder-a/
in der Pfad-Angabe haben
find . -path '*/folder-a/*'
Findet alle Verzeichnisse mit dem Namen “folder-a”
find . -name "folder-a" -type d
Leere Dateien auflisten:
find . -depth -type f -empty
findet alle Unterverzeichnisse die leer sind und entfernt diese:
find . -depth -type d -empty -exec rmdir {} \;
Findet alle Dateien mit der Datei-Endung .jpg
und löscht diese:
find . -name "*.jpg" -type f -delete
chmod auf allen unterverzeichnissen in einem verzeichnis:
find /path/to/folder -type d -exec chmod 750 {} \;
chmod auf allen Dateien in einem verzeichnis (rekursiv!):
find /path/to/folder -type f -exec chmod 644 {} \;