다음 명령이 있습니다.
find . -mtime -5 -type f -exec ls -ltr {} \; | awk '{print "cp -p "$9" "$7}'
출력은 다음과 같습니다.
cp -p ./18587_96xxdata.txt 10
cp -p ./16947_96xxdata.txt 8
cp -p ./32721_96xxdata.txt 9
cp -p ./32343_96xxdata.txt 9
cp -p ./32984_96xxdata.txt 10
하지만 출력의 마지막 부분이 항상 다음과 같이 2자리가 되기를 원합니다.
cp -p ./18587_96xxdata.txt 10
cp -p ./16947_96xxdata.txt 08
cp -p ./32721_96xxdata.txt 09
cp -p ./32343_96xxdata.txt 09
cp -p ./32984_96xxdata.txt 10
다양한 변형을 시도했지만 %02d
원하는 것을 얻지 못했습니다.
내가 시도한 것은 다음과 같습니다.
find . -mtime -5 -type f -exec ls -ltr {} \; | awk '{print "cp -p " $9 " "("%02d", $7)}'
을 사용해야 합니까 printf
? 그렇다면 어떻게 사용합니까?
감사합니다!
답변1
바라보다https://mywiki.wooledge.org/ParsingLs그리고https://mywiki.wooledge.org/Quotes그런 다음 다음을 수행하십시오.
$ find . -mtime -5 -type f -printf "cp -p '%p' '%Ad'\n"
cp -p './bbbb.csv' '09'
cp -p './cccc.csv' '10'
cp -p './out1.txt' '09'
cp -p './out2.txt' '05'
답변2
응, printf
네 친구야. %.2d
숫자를 0~2자리로 채우는 데 사용됩니다 .
find . -mtime -5 -type f -exec ls -ltr {} \; |
awk '{printf "cp -p %s %.2d\n", $9, $7}'
이를 설명하기 위해 원시 출력이 포함된 파일에 대해 다음 명령을 실행했습니다.
$ cat file
cp -p ./18587_96xxdata.txt 10
cp -p ./16947_96xxdata.txt 8
cp -p ./32721_96xxdata.txt 9
cp -p ./32343_96xxdata.txt 9
cp -p ./32984_96xxdata.txt 10
$ awk '{printf "%.2d\n", $NF}' file
10
08
09
09
10
아주 좋은점 참고해주세요@edmorton이 제출함. ls 구문 분석은 매우 취약합니다. Ed의 솔루션이 훨씬 좋습니다.