2016-05-17 5 views
1

Ich möchte mit Format Folder/Folder drucken.Letzter Teil des Ordnerpfads + Dateiname

statt vollständige Pfade:

/volume1/ArtWork/Folder1/folderA 
/volume1/ArtWork/Folder1/folderB 
/volume1/ArtWork/Folder2/folderA 
/volume1/ArtWork/Folder2/folderA 

ich in eine txt "semi-Pfade" (nicht nur Dateinamen!) Drucken möchten:

Folder1/folderA 
Folder1/folderB 
Folder2/folderA 
Folder2/folderA 

Dies ist, was ich bin derzeit mit:

find /volume1/ArtWork/* -type d -maxdepth 2 \ 
    -not -empty -printf '%f\n' \ 
    > /volume1/ArtWork/filenamesdir.txt 

(ich möchte nicht-leere Ordner drucken, aber das Format im Moment ist falsch)

+0

dies wie eine Aufgabe scheint für 'awk' – jgr208

Antwort

0

Ich empfehle, zu diesem Ordner zu navigieren, bevor Sie den Befehl find ausführen. Mit -printf '%P\n' Sie das Teil von Interesse drucken können, die jeweils auf einer separaten Zeile:

pushd /volume1/ArtWork 
find . -type d -maxdepth 2 -not -empty -printf '%P\n' 
popd 

Bitte beachte, dass ich pushd/popd statt cd verwenden. Das macht den Wechsel in das Verzeichnis und zurück zum vorherigen bequemer.

+0

aus der' bash' Version ist 'pushd' und 'popd' unterstützt? Kann es nicht finden in GNU Bash 4.1.2 – Inian

+0

Das klingt seltsam. Es funktioniert sogar mit ziemlich alten Bash 3.1.x auf MacOS. Wenn Sie es wirklich nicht haben sollten, dann müssen Sie gute alte 'cd' verwenden. – hek2mgl

+0

Wie suchen Sie nach' pushd' und 'popd'? Es ist in bash selbst: https://www.gnu.org/software/bash/manual/bashref.html – jerik

0

Dies tun:

find /volume1/ArtWork/* -maxdepth 2 -type d \ 
-exec sh -c 'echo $0 | grep -o "[^/]*/[^/]*$"' {} \; \ 
> /volume1/ArtWork/filenamesdir.txt 
0

Dies ist eine Gnu-sed-Version:

find /your/path -mindepth 1 -type d -print0 | 
xargs -0 -I{} bash -c 'sed -r "s/.*\/(.*\/.*)$/\1/" <<<"{}"'