Linux
重擊 |CSV 格式的報告
我需要在 CSV 格式的報告 (Output.rpt) 中創建使用 ff 欄位重命名的所有文件的報告。我需要一個顯示的輸出
a. Column1 = Original Filename b. Column2 = Original Timestamp date c. Column3 = Renamed filename value
下面是我使用原始文件名創建的 x 個文件的程式碼。
for i in {1938..2037}; do ## create a file with a random month touch -d "${i}-$((RANDOM % 12 + 1))-01" file_$((i-1937)) done Output is below: -rw-r--r-- 0 Oct 1 2037 file_100 -rw-r--r-- 0 Jul 1 2036 file_99 -rw-r--r-- 0 Sep 1 2035 file_98 -rw-r--r-- 0 Jan 1 2034 file_97
下面是我用時間戳重命名文件的腳本
for f in * do ref=$(stat -c %y "$f" | awk '{print $1}') mon=$(date -d "$ref" +%b) year=$(date -d "$ref" +%Y) mv -- "$f" "file_${mon^^}${year}" done Output: -rw-r--r-- 0 Oct 1 2037 file_OCT2037 -rw-r--r-- 0 Jul 1 2036 file_JUL2036 -rw-r--r-- 0 Sep 1 2035 file_SEP2035 -rw-r--r-- 0 Jan 1 2034 file_JAN2034
對於實際重命名,請刪除該
echo
單詞。ls -l file_* | awk ' BEGIN { OFS=","; print "Original filename", "Original timestamp", "Renamed filename" > "output.rpt"; } { renamed_filename = "file_" toupper($6) $8; original_timestamp = sprintf("%d-%s-%02d", $8, $6, $7); exit_status = system("echo mv -v -- " $9 " " renamed_filename); if(!exit_status) print $9, original_timestamp, renamed_filename > "output.rpt"; }'
原始文件
-rw-rw-r-- 1 user user 0 Jul 1 1938 file_1 -rw-rw-r-- 1 user user 0 Sep 1 1947 file_10 -rw-rw-r-- 1 user user 0 May 1 2037 file_100
生成的重命名命令
mv -v -- file_1 file_JUL1938 mv -v -- file_10 file_SEP1947 mv -v -- file_100 file_MAY2037
輸出.rpt
### Comma-separated values. $ cat output.rpt Original filename,Original timestamp,Renamed filename file_1,1938-Jul-01,file_JUL1938 file_10,1947-Sep-01,file_SEP1947 file_100,2037-May-01,file_MAY2037 ### Pretty printed by the `column` command. $ cat output.rpt | column -t -s, Original filename Original timestamp Renamed filename file_1 1938-Jul-01 file_JUL1938 file_10 1947-Sep-01 file_SEP1947 file_100 2037-May-01 file_MAY2037