根据选择的选项在文件名中添加或删除日期

时间:2018-05-30 21:30:17

标签: bash

我添加以下第一个代码,将当前日期添加到文件名,第二个代码删除日期。

是否有可能合并两个代码并根据选项执行所需的代码部分。

如果我想在文件名中添加日期,请选择一个选项,如果我想删除其他日期选项。

它可以在日常基础上使用,因为脚本中有一些更改,也可以为某些脚本生成每日备份。

将日期添加到文件名末尾的代码

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

实际上我有单独的脚本,然后我正在寻找合并两者的可能性。

提前致谢。

1 个答案:

答案 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
}