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
답변1
실제 이름을 바꾸려면 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