Ich versuche, einige Verzeichnisse umzubenennen, die "Fieber" enthalten, um "Malaria" stattdessen zu enthalten. Die Anweisung ist es ohne sed oder umzubenennen. Bis jetzt sind meine Fehler hauptsächlich Zeilen wieGibt es eine Möglichkeit, Verzeichnisse rekursiv umzubenennen, ohne sed oder umzubenennen?
mv: cannot stat ‘retest\nretest/Section-01\nretest/Section-02\nretest/Section-03\nretest/Section-04’: No such file or directory
.
Der beste Code, den ich gemacht habe, ist das Umbenennen von Verzeichnissen in der ersten Ebene.
Hier ist meine Verzeichnisstruktur:
Fever-A/Malaria-A-A
Fever-B/Fever-B-A
Fever-B/Fever-B-B
Fever-C/Malaria-A
Fever-C/Fever-C-A
Fever-C/Fever-C-B
Fever-C/Fever-C-C-C
Fever-D/Malaria-A
Fever-D/Malaria-B
Der Code, den ich bisher habe, ist:
#!/bin/bash
# Access directory
#cd $1
# Find all subdirectories in $1 and load up array
all=($(find $1 -type d))
#echo ${all[@]}
# Loop through directories above
for dir in ${all[@]}
do
# echo "$dir"
cd $dir
# List files with "Section" in name
subdir=(:"Section*")
# A second loop for directories in each dir with "Section*"
for item in ${subdir[@]}
do
echo $item
echo "--------------------"
# Rename operation
mv $item ${item//Fever/Malaria}
done
cd $1
done
Ein weiterer Ansatz, den ich in Betracht gezogen haben, eine Funktion verwendet, wie so aber es funktioniert auch nicht: #!/Bin/bash
rename(){
old_names=($(find $1 -maxdepth 1 -type d))
for item in ${old_names[@]}
do
if [[ $item = *Section* ]]; then
new_name=${item//Fever/Malaria}
mv $item $new_name
elif [[ $1 != $item ]]; then
rename $item
fi
rename $1
done
}
rename $1
Begrenzen Sie Ihre 'find' Anweisung mit der Option' -name', z. 'find/path -type d -name" * Fever * "' Allgemein 'beim Lesen -r fname; Sachen machen...; done <<(find/Pfad -type d -name "* Fieber *") ' –
Verwenden Sie Zitate ..... –
@KarolyHorvath freundlicherweise illustrieren. Ich würde dich gerne besser verstehen. – SpaghettiThots