我添加以下第一个代码,将当前日期添加到文件名,第二个代码删除日期。
是否有可能合并两个代码并根据选项执行所需的代码部分。
如果我想在文件名中添加日期,请选择一个选项,如果我想删除其他日期选项。
它可以在日常基础上使用,因为脚本中有一些更改,也可以为某些脚本生成每日备份。
将日期添加到文件名末尾的代码
D=$(date --iso)
for F in *tt*
do
Dot="${F//[^\.]/}" # this removes anything but a dot
if [ -n "$Dot" ]; then
mv "$F" "${F%.*}-$D.${F##*.}"
else
mv "$F" "$F-$D"
fi
done
从文件名中删除日期的代码
for file in *tt*
do
chmod 777 $file
mv "$file" "${file%???????????}"
done
实际上我有单独的脚本,然后我正在寻找合并两者的可能性。
提前致谢。
答案 0 :(得分:2)
您可以使用案例来检查标志,如下所示:
funct() {
case "$1" in
-a|--add)
Dot="${2//[^\.]/}" # this removes anything but a dot
if [ -n "$Dot" ]; then
mv "$2" "${2%.*}-$D.${F##*.}"
else
mv "$2" "$2-$D"
fi
;;
-d|--delete)
mv "$2" "${2%???????????}"
;;
*)
printf "Usage: script -a|-d file\n" > /dev/stderr
break
;;
esac
}
请注意,这是一个非常静态的脚本,我只是复制了你的两个功能,即使我认为有错误。 例如,如果您发现某个文件至少包含一个点,则会将其扩展名替换为日期。
这样,您将丢失扩展名,并且必须在删除日期后手动将其重新放回。
另请注意,此小功能仅使用第一个和第二个参数:我认为您希望在.bashrc
文件中编写此函数(或.bash_aliases
如果您使用它!),但是通过一些小修复,你甚至可以在更大的脚本中使用这个功能[:
修改强>
您可以考虑添加一些内容作为扩展名,以便知道:
保留剩余的功能我会做类似的事情:
funct() {
case "$1" in
-a|--add)
str=$(date +.bak_%Y%m%d_%H%M%S)
mv "$2" "$2$str"
;;
-d|--delete)
mv "$2" "${2%%.bak*}" 2> /dev/null || printf "$2 is not a backup.\n"
;;
*)
printf "Usage: script -a|-d file\n" > /dev/stderr
break
;;
esac
}