
연도를 기준으로 파일을 이동해야 합니다. 나는 find
명령 을 사용했다
find /media/WD/backup/osool/olddata/ -mtime +470 -exec ls -lrth {} \;|sort -k6
하지만 이 명령을 성공적으로 실행하려면 정확한 숫자를 알아야 합니다. mtime
이제 470은 단지 추측일 뿐입니다. 2012년을 입력하면 2012년과 관련된 파일만 제공된다는 의미입니다.
그래서 어떻게 해야할지 조언이 필요해요
예를 들어 2012년을 기준으로 파일을 찾아 다른 디렉토리로 이동합니다.
OS release 5.2
FIND version
GNU find version 4.2.27
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX
답변1
-newermt
다음에 대한 옵션을 사용하고 싶습니다 find
.
find /media/WD/backup/osool/olddata/ -newermt 20120101 -not -newermt 20130101
수정 시간이 2012년인 모든 파일을 얻으려면
찾기가 지원되지 않는 경우 -newermt
다음을 수행하여 오프셋 계산 사용을 방지할 수도 있습니다.
touch -d 20120101 /var/tmp/2012.ref
touch -d 20130101 /var/tmp/2013.ref
find /media/WD/backup/osool/olddata/ -newer /var/tmp/2012.ref -not -newer /var/tmp/2013.ref
맨페이지
-newerXY reference
Compares the timestamp of the current file with reference. The
reference argument is normally the name of a file (and one of
its timestamps is used for the comparison) but it may also be a
string describing an absolute time. X and Y are placeholders
for other letters, and these letters select which time belonging
to how reference is used for the comparison.
...
m The modification time of the file reference
t reference is interpreted directly as a time
답변2
touch --date=2011-12-31T23:59:59 start
touch --date=2012-12-31T23:59:59 stop
find / -newer start \! -newer stop -printf %Tx" "%p\\n
-exec ls
아무 의미가 없습니다.
답변3
매뉴얼 페이지에 따르면 -mtime에 대한 인수는 찾고 있는 일수입니다. date +%j
올해 1월 1일 이후의 일수를 구하는 데 사용할 수 있습니다 .
답변4
작업 디렉토리에서 이 작업을 수행하는 경우 대신 다음을 수행할 수 있습니다.
ls -l |awk '{ if ($8 == "2013") print $9 }'
이렇게 하면 작업이 상당히 단순화되고 중복이 발생하지 않습니다. 그러나 또한 이러한 파일이 6개월보다 오래되었다고 가정하므로 ls
정확한 시간 대신 연도가 인쇄됩니다.
6개월이 넘은 파일의 경우 다음과 같이 바꾸면 됩니다.
ls -l |awk '{ if ($6 == "May") print $9 }'
또는 달에 따라 이와 유사한 것. 파일을 이동할 월 목록을 생성하려면(또는 연도 목록을 생성하려면) 다음을 수행하십시오.
month="May Jun Jul";
for i in `echo $month`;
do
for j in `ls -l |awk '{ if ($6 == "'$i'") print $9}'`
do
mkdir -p $i
mv $j $i
done
done