我在抓取資料時犯了一個錯誤,現在我的檔案總是以錯誤的順序排序。現在檔案名中的順序是 DD:MM:YYYY 但我需要它是 MM:DD:YYYY
檔案名示例:
07.08.2020-Cf_J-rraZD4.webm
15.02.2020-KigC0ER_On4.webm
22.09.2020-m3iAo8SYBko.webm.srt
30.07.2020-8Qy94fGod_0.webm.srt
07.08.2020-Cf_J-rraZD4.webm.srt
15.02.2020-KigC0ER_On4.webm.srt
有沒有一種簡單的方法可以用 bash 做到這一點?
編輯:
我最終使用了他的:
#! /bin/bash
for f in *.srt ; do
new=${f:6:4}${f:5:1}${f:3:3}${f:0:3}${f:1:0}${f:11}
if [[ -f $new ]] ; then
echo "Can't rename $f: $new already exists!" >&2
else
mv "$f" "$new"
fi
done
uj5u.com熱心網友回復:
使用帶有${var:offset:length}語法的引數擴展來提取部分檔案名。
#! /bin/bash
for f in * ; do
new=${f:3:3}${f:0:2}${f:5}
if [[ -f $new ]] ; then
echo "Can't rename $f: $new already exists!" >&2
else
mv "$f" "$new"
fi
done
要生成新名稱,您可以使用 sed 處理舊名稱串列:
sed 's/^\(..\)\.\(..\)/\2.\1/'
^匹配字串的開頭\(..\)捕獲兩個字符,第一個這樣的組可以參考為\1,第二個可以參考為\2。\.匹配一個文字點。
uj5u.com熱心網友回復:
帶有Perlrename的prename命令:
rename -n 's/^(..).(..)/$2.$1/' *.webm*
如果一切正常,請洗掉-n.
uj5u.com熱心網友回復:
你可以試試這個 sed
$ sed 's/\([0-9]\{2\}.\)\([0-9]\{2\}.\)\([0-9]\{4\}\)\(.*\)/\2\1\3\4/' input_file
08.07.2020-Cf_J-rraZD4.webm
02.15.2020-KigC0ER_On4.webm
09.22.2020-m3iAo8SYBko.webm.srt
07.30.2020-8Qy94fGod_0.webm.srt
08.07.2020-Cf_J-rraZD4.webm.srt
02.15.2020-KigC0ER_On4.webm.srt
使用此代碼,創建了 4 個組并回傳了反向參考。更改第一個和第二個位置將更改時間戳順序。
或者,使用 bash
$ IFS="."; while read -r day month rest; do echo "$month.$day.$rest"; done < input_file
08.07.2020-Cf_J-rraZD4.webm
02.15.2020-KigC0ER_On4.webm
09.22.2020-m3iAo8SYBko.webm.srt
07.30.2020-8Qy94fGod_0.webm.srt
08.07.2020-Cf_J-rraZD4.webm.srt
02.15.2020-KigC0ER_On4.webm.srt
uj5u.com熱心網友回復:
我無法對 HatLess 的帖子發表評論(我認為該帖子錯誤地交換了一個月前的一個月),但假設允許使用 sed,您可以執行以下操作:
#! /bin/bash
for f in * ; do
new=$(echo $f | sed 's/\([0-9]\{2\}.\)\([0-9]\{2\}\).\([0-9]\{4\}\)\(.*\)/\3.\1\2\4/')
if [[ -f $new ]] ; then
echo "Can't rename $f: $new already exists!" >&2
else
echo "$f -> $new"
mv "$f" "$new"
fi
done
uj5u.com熱心網友回復:
使用 GNU 重命名檔案sed:
printf "%s\n" *.webm* | sed -E 's/^(..).(..)(.*)/mv & \2.\1\3/e'
uj5u.com熱心網友回復:
最終使用這個:
#! /bin/bash
for f in *.srt ; do
new=${f:6:4}${f:5:1}${f:3:3}${f:0:3}${f:1:0}${f:11}
if [[ -f $new ]] ; then
echo "Can't rename $f: $new already exists!" >&2
else
mv "$f" "$new"
fi
done
它確實 dd.mm.yyyy 到 yyyy.mm.dd
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/360740.html
