dir1에 다음 파일이 있다고 가정해 보겠습니다.
-rw-r--r-- 1 user user 10240 Jul 2 11:54 10_data.txt
-rw-r--r-- 1 user user 36048 Jul 4 11:56 95_data.txt
-rw-r--r-- 1 user user 35634 Jul 7 11:56 01_data.txt
-rw-r--r-- 1 user user 10630 Jul 9 11:56 19_data.txt
-rw-r--r-- 1 user user 35476 Jul 9 11:57 93_data.txt
타임스탬프, 특히 날짜(2, 4, 7, 9)를 기준으로 이 파일을 복사할 수 있기를 원합니다.
전임자:
copy 10_data.txt into a directory called 02
copy 19_data.txt into a directory called 09
copy 93_data.txt into a directory called 09
대상 디렉터리(01, 02, 03 등)가 이미 존재하므로 디렉터리 등을 만들 필요가 없습니다. 매일 자정 이후에 cron 작업으로 실행할 계획입니다.
find
이 작업 (date +%d)
이나 이와 유사한 작업에 사용할 수 있는 것이 있나요?
감사합니다!
답변1
답변2
stat
ls
파일 수정 시간, 파일 크기 또는 가장 많이 표시되는 파일 속성을 찾는 친구입니다 .
예를 들어, FreeBSD에서는 stat -f %Sm -t %d -- foo
파일이 마지막으로 수정된 날짜가 표시되는데 foo
, 이는 여러분이 찾고 있는 것 같습니다.
아니요 . 다음 예 find
와 같이 파일을 직접 반복할 수 있습니다 .bash
for f in *; do
d=$(stat -f %Sm -t %d -- "$f")
cp -p -- "$f" $d/
done
대상 OS가 RedHat이라는 귀하의 의견에 대한 응답으로 RedHat의 stat
유틸리티에는 FreeBSD의 형식 유연성이 없는 것으로 보입니다. 맨 페이지를 비교할 수 있습니다여기.
date -r foo "+%d"
이 명령이 적절한 대체 명령이라는 것을 알 수 있습니다 . 스크립트의 관련 줄은 다음과 같습니다.
d=$(date -r "$f" "+%d")
답변3
이것을 시도해 볼 수 있습니다. 나는 그것을 테스트했습니다. 작동해야 한다
cp `ls -ltrh *txt | awk '{if($7=2){print $NF}}'` `ls -ltrh *txt | awk '{print $7}'`
이틀 동안만 고민했는데 디렉토리가 같은 경로에 있습니다. 다른 날짜를 추가하고 디렉터리가 다른 폴더인 경우 해당 폴더도 추가하세요.
또 다른 가정은 파일 이름에 공백이 없다는 것입니다.