연도를 기준으로 파일을 이동해야 합니다. 나는 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