BASH | Relatório formatado em CSV

1

Eu preciso criar um relatório de todos os arquivos renomeados com os campos ff no relatório formatado em CSV (Output.rpt). Preciso de uma saída que exiba

a.  Column1 = Original Filename
b.  Column2 = Original Timestamp date
c.  Column3 = Renamed filename value

abaixo é o meu código para x número de arquivos que eu criei com o nome do arquivo original.

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

Abaixo está meu script para renomear os arquivos com timestamps

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
    
por trixie101 22.09.2017 / 23:13

1 resposta

0

Para renomear de verdade, remova a palavra 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";
}'

Arquivos originais

-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

Comandos de renomeação gerados

mv -v -- file_1 file_JUL1938
mv -v -- file_10 file_SEP1947
mv -v -- file_100 file_MAY2037

output.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
    
por 23.09.2017 / 02:08