簡體   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