파일 이름 타임스탬프 패턴을 사용하여 디렉터리에서 파일 삭제/이동

파일 이름 타임스탬프 패턴을 사용하여 디렉터리에서 파일 삭제/이동

그래서 삭제/이동/필터링이 필요한 파일이 있습니다.

디렉토리에 frames이 패턴 filename 이 포함되어 있다고 가정하면 디렉토리의 모든 파일에는 이러한 패턴이 있습니다 timestamp_in_nanosecond.jpg.

다음은 ls에서 파이프의 꼬리를 사용하는 파일의 예입니다. ls | tail. (ls가 너무 느리기 때문에 tail을 사용합니다. 아마도 나열할 파일이 너무 많기 때문일 것입니다).

.../uwc/frames $ ls | tail
1660649146201561661.jpg
1660649146411875151.jpg
1660649146622526505.jpg
1660649146832063432.jpg
1660649147042957234.jpg
1660649147254488848.jpg
1660649147466753015.jpg
1660649147889093171.jpg
1660649148193314525.jpg
1660649148786199681.jpg

파일을 다른 디렉터리로 이동하려면 frames2어떻게 해야 합니까 (예: 아래와 같이 범위 지정):

 From  1660649147000000000.jpg
 Until 1660649148000000000.jpg

따라서 frames2dir에는 다음 파일만 포함됩니다.

1660649147042957234.jpg
1660649147254488848.jpg
1660649147466753015.jpg
1660649147889093171.jpg

답변1

와일드카드 사용

mv 1660649147?????????.jpg frames2/

캡을 포함할지 여부에 따라 캡도 포함할 수 있습니다.

mv 1660649148000000000.jpg frames2/

버퍼 공간이 부족하여 와일드카드를 일치시킬 파일이 너무 많으면 대신 다음을 사용하세요 find.

find . -name 'frames2' -prune -o -name '1660649147?????????.jpg' -exec mv -t frames2/ {} +

노트

  1. -name 'frames2' -prune절은 하위 디렉터리 find로 내려가는 것을 방지합니다 frames2. 실제로 다른 곳에 있으면 필요하지 않습니다(또는 -o"또는") .frames2
  2. mvGNU 확장이 없는 경우 절을 로 변경하세요 . 단 -t, 완료하는 데 시간이 꽤 걸린다는 점에 유의하세요.-exec-exec mv {} frames2/ \;

모든 경우에 실제로 파일을 이동하지 않고도 선택한 파일 세트를 볼 수 mv있도록 수정할 수 있습니다 .echo mv

관련 정보