簡體   English   中英

如何使用 linux 中的 bash shell 腳本遞歸地重命名文件中的所有目錄、文件和文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM