각 파일의 전체 경로가 포함된 파일 목록을 반환하는 스크립트가 있습니다. 예를 들어 - root/folder/file@1610565763436
. 그래서 출력은 다음과 같습니다
/root/folder/file@1610565763436
/root/folder/file@1610568241000
/root/folder/file@1610597041000
/root/folder/file@1610625841000
/root/folder/file@1610654641000
/root/folder/file@1610683441000
/root/folder/file@1610712242000
/root/folder/file@1610741041000
/root/folder/file@1610769841000
/root/folder/file@1610798641000
/root/folder/file@1610827441000
/root/folder/file@1610856241000
/root/folder/file@1610885041000
/root/folder/file@1610913841000
사람이 읽을 수 있는 타임스탬프만 출력되도록 출력 형식을 지정하고 싶습니다. 타임스탬프를 얻기 위해 a를 시도했지만 cut -d "@" -f 2
xargs에 파이프하고 date 명령을 실행해도 작동하지 않았습니다. 즉 /bin/bash scriptToGetFiles | cut -d "@" -f 2 | xargs date -d {}
.
FWIW, 위 명령을 실행하면 xargs -t
오류가 반환됩니다.
date -d @ 1610565763436 1610568241000 1610597041000 1610625841000 1610654641000 1610683441000 1610712242000 1610741041000 1610769841000 1610798641000
date: extra operand ‘1610568241000’
어떤 제안이나 조언이라도 감사하겠습니다.
답변1
GNU 날짜를 사용하세요:
$ echo /root/folder/file@1610565763436 | cut -d@ -f2 | xargs -I '{}' echo {} / 1000 | bc | xargs -I '{}' date --date=@{}
Wed Jan 13 20:22:43 CET 2021
FreeBSD에서:
$ echo /root/folder/file@1610565763436 | cut -d@ -f2 | xargs -I '{}' echo {} / 1000 | bc | xargs date -r
Wed Jan 13 20:22:43 CET 2021
답변2
일반 bash를 사용하면 printf
Epoch 시간 형식을 지정할 수 있습니다.
processThatOutputsStuff | while IFS=@ read -r path date; do
printf '%(%c)T\n' "${date%???}"
done
${date%???}
는매개변수 확장변수 값에서 마지막 3자를 제거합니다.
다른 날짜/시간 형식을 원하면 %c
.