我有一个脚本,用于监视列表($ docs)中的一组文件夹名称。 如果它发现不是空的文件夹,它应该:重命名和移动文件并追加一个时间戳它。Bash:将格式化日期包含到重命名正则表达式中
这是我走到这一步:
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 /目录。
但是,挑战在于追加了一个“日期+%d%m%Y%H%M%S”字符串,我无法找到任何方法将其优雅地添加到我的重命名字符串中。
添加$(日期),忽略任何额外的格式。
例如追加它重新命名的:(^ | /。)([^ /])/([^ /] *)$:/ TMP/$ 2 $ 3 $(日期) 给出的文件名像 “folderplacement_filename.ext 4 24 35 20 48 111 123 321”
我想要的文件,看起来像 “folderplacement_filename11102017011632.ext”(附加日期后.EXT也行。)
这可能是我需要用正确的方式引用或括起来,但我无法弄清楚。
谢谢!这让我走上了正轨。我通过双引号和转义解决了$'es:rename's:(^ |。* /)([^ /] *)([^ /] *)/([^ /] *)\ $:/ tmp/$ now \ _ \ $ 2 \ $ 3 \ $ 4:“您在发现丢失的内容时也是正确的,这是在脚本中找不到的错字。 – Stian