Bash
用於從文本文件源重命名文件的 Bash 腳本
我對 bash 還很陌生;我一次可以使用簡單的命令 1 執行簡單的管理任務。但是,我的任務是使用文本文件作為重命名源來重命名目錄中的某些文件,並且非常感謝一些指針,因為我已經超出了我的深度。
讓我解釋:
New File Name.xlsx 0.1 000011F4.dat New File Name.xlsx 0.2 000011F5.dat New File Name.xlsx 0.3 000011F6.dat New File Name.xlsx 0.4 000011F7.dat New File Name.xlsx 0.5 000011F8.dat New File Name.xlsx 0.6 000011F9.dat
我擁有的源文本文件有點類似於上面的文件。目的是第一個“列”是文件的新名稱,中間是版本,第三個是目前文件名。
我需要重命名目錄中的 .dat 文件,將它們更改為第一列中顯示的名稱。我還需要將版本號 0.1、0.2 等添加到每個文件的開頭。
我有幾個問題:
文件中有空格是一個大問題嗎?在每個文件字元串周圍添加“”會更好嗎?
基本上我不知道從哪裡開始,任何幫助將不勝感激。如您所見,它比通常的重命名稍微複雜一些,需要將版本列添加到文件名的開頭和列表中的空白處。
這應該有效:
sh <(sed -r 's/^\s*(.*)\s+([0-9\.]+)\s+([0-9A-Z]{8}\.dat)\s*$/mv -iv \3 "\2 \1"/' files)
…
files
源文件的名稱在哪裡。它的作用是使用程序替換
sed
將命令的結果傳遞給sh
(shell)的新實例。該命令的輸出是:sed
mv -iv 000011F4.dat "0.1 New File Name.xlsx" mv -iv 000011F5.dat "0.2 New File Name.xlsx" mv -iv 000011F6.dat "0.3 New File Name.xlsx" mv -iv 000011F7.dat "0.4 New File Name.xlsx" mv -iv 000011F8.dat "0.5 New File Name.xlsx" mv -iv 000011F9.dat "0.6 New File Name.xlsx"
將
sed
命令分開,它會搜尋一個模式:
^
- 行的開頭\s*
- 開頭的任何空格(.*)
- 任何字元(括號將結果儲存到\1
)\s+
- 至少一個空格字元([0-9\.]+)``0-9
-和中的至少一個.
(儲存到\2
)\s+
- 至少一個空格字元([0-9A-Z]{8}\.dat)``0-9
- or中的8 個字元A-Z
,後跟.dat
(儲存到\3
)\s*
- 最後的任何空格$
- 行尾… 並將其替換為
mv -iv \3 "\2 \1"
,\1
to\3
是先前儲存的值。如果您願意,您可以在版本號和文件名的其餘部分之間使用空格以外的其他內容。結果如下:
$ ls -l total 60 -rw-rw-r-- 1 z z 0 Aug 8 14:15 000011F4.dat -rw-rw-r-- 1 z z 0 Aug 8 14:15 000011F5.dat -rw-rw-r-- 1 z z 0 Aug 8 14:15 000011F6.dat -rw-rw-r-- 1 z z 0 Aug 8 14:15 000011F7.dat -rw-rw-r-- 1 z z 0 Aug 8 14:15 000011F8.dat -rw-rw-r-- 1 z z 0 Aug 8 14:15 000011F9.dat -rw-rw-r-- 1 z z 222 Aug 8 13:47 files $ sh <(sed -r 's/^\s*(.*)\s+([0-9\.]+)\s+([0-9A-Z]{8}\.dat)\s*$/mv -iv \3 "\2 \1"/' files) `000011F4.dat' -> `0.1 New File Name.xlsx' `000011F5.dat' -> `0.2 New File Name.xlsx' `000011F6.dat' -> `0.3 New File Name.xlsx' `000011F7.dat' -> `0.4 New File Name.xlsx' `000011F8.dat' -> `0.5 New File Name.xlsx' `000011F9.dat' -> `0.6 New File Name.xlsx' $ ls -l total 60 -rw-rw-r-- 1 z z 0 Aug 8 14:15 0.1 New File Name.xlsx -rw-rw-r-- 1 z z 0 Aug 8 14:15 0.2 New File Name.xlsx -rw-rw-r-- 1 z z 0 Aug 8 14:15 0.3 New File Name.xlsx -rw-rw-r-- 1 z z 0 Aug 8 14:15 0.4 New File Name.xlsx -rw-rw-r-- 1 z z 0 Aug 8 14:15 0.5 New File Name.xlsx -rw-rw-r-- 1 z z 0 Aug 8 14:15 0.6 New File Name.xlsx -rw-rw-r-- 1 z z 222 Aug 8 13:47 files