我想重命名包含“发烧”的几个目录来包含“疟疾”,而不是。该指令是在没有sed或重命名的情况下执行的。到目前为止,我的错误主要包括像有没有方法递归重命名目录而不使用sed或重命名?
mv: cannot stat ‘retest\nretest/Section-01\nretest/Section-02\nretest/Section-03\nretest/Section-04’: No such file or directory
。
我的代码最好的做法是在第一级重命名目录。
这里是我的目录结构:
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
我到目前为止的代码是:
#!/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
另一种方法,我认为是使用功能,像这样,但它不工作: #! /斌/庆典
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
用'-name'选项限制你的'find'语句,例如, 'find/path -type d -name“* Fever *”'一般'while read -r fname;做东西...;完成<<找到/路径类型D - 名称“*发烧*”)' –
使用引号..... –
@KarolyHorvath善意说明。我很想更好地理解你。 – SpaghettiThots