我有一個腳本,用於監視列表($ 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