[英]How to rename all directories , files and text in the files recursively using bash shell script in linux
我已經重命名了文件中的所有文件和文本,並且還應該將目錄重命名為最深的級別,並且必須遞歸地完成我嘗試了以下兩個代碼:
代碼:
#!/bin/bash
cd /home/my_codes/vehicle
echo "enter the old name: "
read old_name
echo "enter the new name: "
read new_name
echo "you entered $old_name and $new_name "
if [[ $old_name -eq $new_name ]]; then
#i have tried with "$old_name" == "$new_name" but no use
echo "redeclaration error"
else
echo "process started"
for f in *;
do
sed -i 's/$old_name/$new_name/' "$f"
if cmp -s -- "$f" $old_name*.txt; then
mv "$f" "${f/$old_name/$new_name}"
fi
done
fi
即使我給它起不同的名稱,代碼也總是返回重新聲明錯誤。 該功能在沒有第一個 if 條件的情況下工作正常,但我只是添加了 arguments 和重新聲明錯誤來檢查它。
編輯:我嘗試過使用以下遞歸代碼,但無法做到。 請讓我知道我可以在相同代碼中進行哪些更改以獲得所需的 output。
#!/bin/bash
rnrr() {
echo "processing"
echo $old_name
echo $new_name
for f in *;
do
if [ -d "$f" ]; then
mv "$f" "${f/$old_name/$new_name}"
echo $f
rnrr "$f"/*
else
sed -i "s/$old_name/$new_name/" "$f"
if cmp -s -- "$f" $old_name.*; then
mv "$f" "${f/$old_name/$new_name}"
fi
fi
shift
done
}
echo " current directory :"
currdir=$(pwd)
echo $currdir
echo "enter the diretory path(absolute):"
read path
cd $path
echo "current directory :"
echo $(pwd)
echo "enter the old name :"
read old_name
echo "enter the new name :"
read new_name
echo "process started.."
rnrr
可以通過查找 sed 和重命名命令輕松實現首先讓我們使用以下命令替換所有 txt/.c 文件內容中的所有車輛,該命令使用 Z177544AA797AF6F322F8CAA5E80E7F24 替換
find -name vehicle.txt -exec sed -i "s:vehicle:car:g" {} \;
現在讓我們使用以下命令重命名文件和文件夾名稱
find -depth -name "vehicle*" -exec rename "s/(.*)vehicle/\1car/" {} +
請注意,我在最終命令中添加了 -depth 以確保首先重命名最深的文件夾/文件。 請參考手冊頁查找,sed 並重命名以獲取更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.