wenn finde ext dann cp übergeordnetes Verzeichnis sonst echo nicht gefunden

wenn finde ext dann cp übergeordnetes Verzeichnis sonst echo nicht gefunden

Bisher ist mir das Folgende eingefallen.

if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
        echo 1
else
        echo 0
fi

Was ich aber gerne machen würde, ist, das übergeordnete Verzeichnis der gefundenen Datei an einen anderen Ort zu kopieren.

Ich habe das Gefühl, dass ich einfach den Suchbefehl verwenden sollte.

Antwort1

Die Antwort von fede.evol schlägt fehl, wenn Pfade Leerzeichen enthalten. Die Ausgabe von findoderls sollte nicht in einer Befehlsersetzung verwendet werden.

Die richtige Vorgehensweise zum Umgang mit allen Dateinamen (außer Pfaden mit Zeilenumbrüchen) wäre:

find /somewhere -name "*.mkv" -exec dirname {} \; | uniq | \
while IFS= read -r dir; do echo cp -- "$dir" /other/; done

Auf diese Weise wird jeder Ordner von /somewherenach kopiert /other/. Beachten Sie, dass der abschließende Schrägstrich obligatorisch ist, da sonst das Ziel immer überschrieben würde.

Antwort2

Verwenden Sie diese Option dirname FILE, um den Verzeichnisnamen einer bestimmten Datei abzurufen. Beispiel:

find DIRECTORY -name "*.mkv" -exec dirname {} \;

Unter VERZEICHNIS werden dir alle Verzeichnisse mit einer MKV-Datei angezeigt. Dann kannst du sie durchreichen, uniqum keine Duplikate zu erhalten und sie dann ggf. kopieren.

Zum Beispiel

cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR

verwandte Informationen