여러 하위 디렉터리의 모든 파일을 하나의 디렉터리로 이동하고 해당 파일에 타임스탬프를 추가해야 합니다.
다음과 같은 디렉토리 구조가 있습니다.
Interface/Temp/GoodsRecipt/GR123/abc.csv, cad.csv
Interface/Temp/GoodsRecipt/GR456/abc.csv, cad.csv
임의의 디렉터리에서 단일 디렉터리로 CSV 파일을 이동하고 파일에 타임스탬프를 추가하고 싶습니다. 결과는 다음과 같습니다.
Interface/Temp/GoodsRecipt/GRout/abc05082014.csv, cad05082014.csv, abc06032014.csv, cad06032014.csv
이 작업을 수행하려면 쉘 스크립트를 작성하고 독립형으로 실행해야 합니다. 쉘 스크립트 생성에 대한 도움을 주시면 대단히 감사하겠습니다.
답변1
INDIR='./Interface/Temp/GoodsRecipt'
OUTDIR='./Interface/Temp/GoodsRecipt/GRout'
mkdir -p "$OUTDIR"
find "$INDIR"/GR*/ -type f -name '*.csv' | while IFS= read f ; do
fd=$(date +'%Y%m%d' -d @$(stat -c %Y "$f"))
bn=$(basename "$f" .csv)
mv "$f" "$OUTDIR/$bn$fd.csv"
done
참고: 여기서는 DDMMYYYY 대신 YYYYMMDD를 사용했습니다. 날짜 형식이 우수한 데에는 여러 가지 이유가 있지만 가장 중요한 것 중 하나는 올바르게 정렬되는 유일한 형식이라는 것입니다.
또 다른 중요한 이유는 아무도 YYYYDDMM을 사용하지 않기 때문에 명시적이라는 것입니다. 그러나 05082014는 "2014년 5월 8일"(미국인인 경우)을 의미할 수도 있고 "2014년 8월 5일"(전 세계 거의 모든 곳)을 의미할 수도 있습니다. 의도된 의미가 무엇인지 알 수 있는 방법이 없기 때문에 이 형식을 사용하는 것은 안전하지 않습니다.
DDMMYYYY를 계속 사용하려면 날짜 명령을 다음으로 변경하세요 date +'%d%m%Y'
.
fd=$(date +'%d%m%Y' -d @$(stat -c %Y "$f"))