有人可以请帮助这个脚本。我需要使用grep循环遍历需要更改的文件名。
#!/bin/bash
file=
for file in $(ls $1)
do
grep "^.old" | mv "$1/$file" "$1/$file.old"
done
答案 0 :(得分:2)
bash
可以在不使用grep
的情况下处理正则表达式。
for f in "$1"/*; do
[[ $f =~ \.old ]] && continue
# Or a pattern instead
# [[ $f == *.old* ]] && continue
mv "$f" "$f.old"
done
您还可以将名称检查移动到模式中:
shopt -s extglob
for f in "$1/"!(*.old*); do
mv "$f" "$f.old"
done
答案 1 :(得分:0)
如果我理解你的问题,你只想重命名一个文件(即 dir / file.txt ==> dir / file.old )该文件之前尚未重命名。解决方案如下。
#!/bin/bash
for file in "$1/"*
do
backup_file="${file%.*}.old"
if [ ! -e "$backup_file" ]
then
echo mv "$file" "$backup_file"
fi
done
脚本当前没有实际备份,它只显示操作。运行一次脚本并检查输出。如果这是您想要的,请从脚本中删除echo
并再次运行。
以下是 no if 解决方案:
ls "$1/"* | grep -v ".old" | while read file
do
echo mv "$file" "${file}.old"
done
ls
命令显示所有文件。.old
扩展名的文件,以便不显示这些文件。.old
扩展名的文件名并重命名。