Я пытаюсь переименовать несколько каталогов, содержащих «Лихорадку», чтобы вместо них было «Малярия». Инструкция сделать это без sed и переименования. Пока что мои ошибки включают в основном такие строки, как mv: cannot stat 'retest / Section-01 \ nretest / Section-02 \ nretest / Section-03 \ nretest / Section-04': Нет такого файла или каталога
.
Лучшее, что сделал мой код, - это переименование каталогов на первом уровне.
Вот моя структура каталогов:
Fever-A / Malaria-AA
Fever-B / Fever-BA
Fever-B / Fever-BB
Fever-C / Malaria-A
Fever-C / Fever-CA
Fever-C / Fever-CB
Fever-C / Fever-CCC
Fever-D / Malaria-A
Fever-D / Malaria-B
Вот код, который у меня есть:
#!/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
Другой подход, который я рассмотрел, - это использование такой функции, но она тоже не работает:
#!/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