1 년을 기준으로 파일을 이동해야합니다. 나는 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
답변
다음 -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
답변
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
말이되지 않습니다.
답변
매뉴얼 페이지에 따르면 -mtime에 대한 인수는 원하는 일 수입니다. date +%j
현재 연도의 1 월 1 일 이후의 일 수를 찾는 데 사용할 수 있습니다 .
답변
다음 one-liners에서 와 같이 stat
및 / 또는 date
명령 과 조합하여 사용할 수 있습니다 .
BSD / Mac OS X :
find . -type f -print | while read file; do eval `stat -s "$file"`; year=`date -jf "%s" "+%Y" "$st_mtime"`; dest="/path/to/destination/$year; mkdir -p "$dest"; mv "$file" "$dest"; done
리눅스 :
find . -type f -print | while read file; do year=`date -r "$file" "+%Y"`; dest="/path/to/destination/$year; mkdir -p "$dest"; mv "$file" "$dest"; done
두 경우 모두 접근 방식은 date
명령 을 사용하여 모든 파일의 마지막 수정 시간에서 연도를 추출한 다음 올해 경로를 구성하는 것입니다. mkdir -p
이 경로가 없으면 명령 이이 경로를 만듭니다. 물론 다른 find
옵션을 사용 하여 검색을 구체화 할 수도 있습니다.
답변
작업 디렉토리에서이를 수행하는 경우 대신 다음을 수행 할 수 있습니다.
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