Linux 替换文件名和内容:shell脚本
我已经编写了替换内容的代码,但是与替换文件名非常混淆,两者都在同一个脚本中。我希望脚本按以下方式运行:Linux 替换文件名和内容:shell脚本,linux,shell,Linux,Shell,我已经编写了替换内容的代码,但是与替换文件名非常混淆,两者都在同一个脚本中。我希望脚本按以下方式运行: suppose I give input : ./myscript.sh abc xyz abc is my string to be replaced xyz is the string to replace with 如果某个目录或其中的任何子目录或文件的名称为abc,则该名称也应更改为xyz 这是我的密码: filepath="/misc/home3/babitasandooja/
suppose I give input : ./myscript.sh abc xyz
abc is my string to be replaced
xyz is the string to replace with
如果某个目录或其中的任何子目录或文件的名称为abc,则该名称也应更改为xyz
这是我的密码:
filepath="/misc/home3/babitasandooja/fol1"
for file in $(grep -lR $1 $filepath)
do
sed -i "s/$1/$2/g" $file
echo "Modified: " $file
done
现在,我应该如何编写代码来替换文件名
我试过:
if( *$1*==$file )
then
rename $1 $2 $filepath
fi
及
但这些都不能正常工作。我该怎么办?我应该采取哪种方法
任何帮助都将不胜感激。
谢谢:)
注意:rename
也会重命名目录部分
使其产生空分隔的输出。i、 e.它生成由文件名组成的输出,其中所有内容都由grep-Z
分隔0x00
使-d'
读取输入以读取
分隔<代码>-r防止 要解释的反斜杠;和0x00
防止使用IFS=
进行分词IFS
使用分隔符“0”进行读输入IFS=read-rd'
删除目录部分。它与base=$(basename“$file”)相同base=${file##*/}
删除文件部分dir=${file%/*}
检查文件名是否有可以重命名的内容<代码>&&如果前一个返回零(真)代码,则执行它后面的命令。将其视为单个链接[[$base==*“$str”*]
语句if
形成新的文件名“$dir/${base//$str/$rep}”
替换${base//$str/$rep}
中与$base
值匹配的任何内容,并将其替换为$str
值$rep
rename
,但这将更加复杂,因为您还必须手动创建目录。我想我误解了你的问题,所以我只想通过:)我希望它对你有帮助。
find -iname $filepath -exec mv $1 $2 \;
#!/bin/bash
dir=$1 str=$2 rep=$3
while IFS= read -rd '' file; do
sed -i "s/$str/$rep/g" -- "$file"
base=${file##*/} dir=${file%/*}
[[ $base == *"$str"* ]] && mv "$file" "$dir/${base//$str/$rep}"
done < <(exec grep -ZFlR "$str" "$dir")
bash script.sh dir string replacement