파일의 특정 번호를 기준으로 한 번에 하나씩 파일을 이동합니다.

파일의 특정 번호를 기준으로 한 번에 하나씩 파일을 이동합니다.

기반으로이 문제, HTML 파일의 날짜 형식이 변경되었습니다. 모든 HTML 파일의 날짜는 다음과 같습니다.

20110730dateishere

dateishere날짜 위치를 쉽게 찾아낼 수 있도록 일부러 파일에 추가했습니다.

이제 HTML 파일 디렉토리 내에서 해당 날짜를 기준으로 한 번에 하나씩 파일을 이동하고 싶습니다.

어떤 파일이 먼저 이동되는지 신경쓰지 않고 한 번에 하나의 파일을 이동하는 경우 간단히 사용할 수 있습니다.

for file in $(ls | tail -1);
do
mv $file /other/location
done

그런데 의 날짜를 기준으로 가장 오래된 파일을 먼저 이동하려면 어떻게 해야 합니까 XXXXXXXXdateishere? (즉, 포함된 HTML 파일은 날짜를 기준으로 20100110dateishere먼저 이전 파일로 이동한 20100111dateishere후 다음 파일로 이동합니다.)

(참고: 20100111은 2010년 1월 11일을 의미함)

답변1

이렇게 하면 트릭을 수행할 수 있습니다.

for i in $(grep dateishere *.html | sed 's/\(.*\):.* \([0-9]*dateishere\).*/\1 \2/' | sort -k 2 | awk '{print $1}')
do
  mv $i blarg/
done

답변2

for dateNfile in $(grep dateishere *html | sed -r 's/^([^:]*):(.*)dateishere/\2:\1/' | sort -n)
do  
  name=${dateNfile/*:/}
  # echo date=${dateNfile/:*/}
  mv $name /other/location
done

따라서 "dateishre"를 포함하는 파일당 한 줄만 있고 해당 줄은 날짜로 시작하지만 sed 명령을 수정하여 다른 경우에도 날짜를 잘라낼 수 있습니다.

파일 이름에 공백이나 개행 문자 등이 있으면 상황이 조금 복잡해지므로 가능하면 무시하고 싶습니다. 하지만 말씀하신 내용에 따르면 그렇지 않습니다.

관련 정보