我有這樣的文件(幾千條)的列表:如何批量移動預置年份到文件名的末尾?
/path/2010 - filename.txt
/path/2011 - another file name.txt
總是遵循這個模式:#### - string.txt
我需要改變他們看起來像這樣:
/path/filename (2010).txt
/path/another file name (2011).txt
我怎樣才能用bash,shell,terminal等快速做到這一點?
我有這樣的文件(幾千條)的列表:如何批量移動預置年份到文件名的末尾?
/path/2010 - filename.txt
/path/2011 - another file name.txt
總是遵循這個模式:#### - string.txt
我需要改變他們看起來像這樣:
/path/filename (2010).txt
/path/another file name (2011).txt
我怎樣才能用bash,shell,terminal等快速做到這一點?
未經測試。
find /path -name '???? - *.txt' -print0 | while read -d ''; do
[[ $REPLY =~ (.*)/(....)\ -\ (.*)\.txt$ ]] || continue
path=${BASH_REMATCH[1]}
year=${BASH_REMATCH[2]}
str=${BASH_REMATCH[3]}
echo mv "$REPLY" "$path/$str ($year).txt"
done
取出echo
一旦產生mv
命令看的權利。
我寧願將此添加爲評論,但我還沒有被允許。
我問過類似的問題,並獲得了很多有用的答案在這裏:
https://unix.stackexchange.com/questions/37355/recursively-rename-subdirectories-that-match-a-regex
也許這些解決方案中的一個可以調整,以適應你的需要。
我知道你沒有用zsh
標記它,但你確實說了shell
。反正這裏是如何與zmv
功能做在zsh
:
autoload zmv # It's not loaded by default
zmv -nvw '* - *.*' '$2 ($1).$3'
刪除-n
當你滿意的輸出。
-v
使zmv
冗長。 -w
隱含地製作一組每個通配符。
如何添加斜線以避開路徑和文件名中的空格? – Ryan 2012-08-16 16:16:39
(。*)應該貪婪地匹配所有內容,直到最後的斜線,空格和全部。 '\'正在轉義文件名中的空格。我不認爲應該有任何其他空間問題。 – chepner 2012-08-16 16:30:02
Doh,未轉義的空格只出現在回顯中。 Mv工作得很好。謝謝。給你「答案」,因爲它沒有另一個圖書館。再次感謝。 – Ryan 2012-08-16 16:46:50