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 find
oderls
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 /somewhere
nach 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, uniq
um keine Duplikate zu erhalten und sie dann ggf. kopieren.
Zum Beispiel
cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR