繁体   English   中英

Bash:将格式化日期包含到重命名正则表达式中

[英]Bash: include formatted date to a rename regex

我有一个脚本,用于监视列表中的一组文件夹名称($ docs)。 并且,如果找到一个不为空的文件夹,则应该:重命名并移动文件,并为其添加时间戳。

这是我到目前为止所得到的:

docs="/home/user/docs.txt"

cat $docs | while read line
do
if find "$line" -mindepth 1 -print-quit | grep -q .; then
   find $line -type f | rename 's:(^|.*/)([^/]*)/([^/]*)$:/tmp/$2$3
else
   echo "empty folders" $line
fi
done

文件docs.txt是一组列出的文件夹,如下所示:

/foldername
/anotherfoldername

该脚本正确地重命名了我的文件(folderplacement_filename.ext),并将其移动到/ temp /目录。

但是挑战在于在字符串后面附加一个“ date +%d%m%Y%H%M%S”,我找不到任何将其优雅地添加到我的重命名字符串中的方法。

添加$(date),将忽略任何其他格式。

例如追加它重新命名的:(^ | /)([^ /])/([^ /] *)$:/ TMP / $ 2 $ 3 $(日期)给出,如“folderplacement_filename.ext 4 24的文件名35 20 48 111 123 321”

我希望文件看起来像“ folderplacement_filename11102017011632.ext”(在.ext之后附加日期也是可以的。)

这可能是我需要以正确的方式引用或括起来的内容,但我无法弄清楚。

我没有使用重命名的经验,但是我建议在该行的末尾缺少引号。

如果使用单引号,则Shell不会为您扩展变量。 这意味着命令参数的最后一部分实际上是$(date) ,这不是您想要的。 您可以使用双引号,但这意味着您需要用反斜杠转义所有$ 或者,您也可以将日期部分放在单引号之外,例如

now=$(date +%d%m%Y%H%M%S)
find $line -type f | rename 's:(^|.*/)([^/]*)/([^/]*)$:/tmp/$2$3'$now

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM