2016-07-08 2 views
-1

Ich habe zwei Ziele, die ich erreichen möchte und brauche etwas Hilfe. HierSkript zum Entfernen des mittleren Zeichens aus mehreren Verzeichnissen, dann Umbenennen von Dateien in Unterverzeichnissen, um Verzeichnis + Dateiname einzubeziehen

ist die Übersicht:

enter image description here

Es gibt Hunderte von Ordnern/Verzeichnissen mit Zufallszahlen (5555 # 5555) die gleiche 001.pdf Datei enthält. Ich mag:

1: Entfernen Sie das Symbol "#" aus jedem Ordner/Verzeichnis

2: die 001.pdf Datei Benennen Sie die neuen Ordnernummern aufzunehmen und die 001.pdf

Wunschergebnis: Der Ordner 5555#5555 werden 55555555 die 001.pdf Datei enthält, die 55555555.001.pdf

wird

Hoffe, dass Sinn macht und danke.

+0

Probieren Sie 'for dir in '* # *"; do mv "$ dir" $ {dir // #}; mv $ {dir // #}/001.pdf $ {dir // #}/$ {dir // #}. 001.pdf; fertig. – alvits

+0

Oder Sie können versuchen, 'rename '#' '* *; für f in */001.pdf; Benenne '/' '/' $ {f %%/*} um. $ f; fertig – alvits

Antwort

0

so update: Danke für die Vorschläge. Hier ist, was ich für mich arbeiten konnte. Vielleicht nicht der beste Weg, aber hey.

curdir=`pwd` 
    for f in `find . -maxdepth 1 -type d -name "*#*" -print`; 
    do 
    echo "folder is $f" 
    newFolder=`echo $f | sed 's/#//g'` 
    echo mv $f $newFolder 
    mv $f $newFolder 
    echo newfolder is $newFolder 
    cd $newFolder 
    for file in `find . -maxdepth 1 -type f -printf '%f\n'`; do 
     echo "mv $file to ${newFolder}_$file" 
     mv $file ${newFolder}_$file 
    done 
    cd $curdir 
    done 
0
for f in *#*; 
do 
    newFolder=$(echo ${f//%}) 
    mv $f $newFolder 
    newFile=$(printf $newFolder".001.pdf") 
    mv $newFolder/001.pdf $newFolder/$newFile 
done 

Dies sollte es tun, obwohl es elegantere Lösungen geben kann. Ändern Sie die regulären Ausdrücke für die Schleife, wenn Sie andere Dateien ohne abfangen möchten.

Verwandte Themen