오래된 하드 드라이브의 사진을 정리하려고합니다. 를 실행하면 ls -l
모든 파일의 생성 날짜가 2012 년 또는 그 이전임을 알 수 있습니다. 이상적으로는 자동으로 마운트되도록 설정되지 않은 컴퓨터의 두 번째 하드 드라이브로이 장치를 옮기고 싶습니다. 바람직하게는이 명령을 함께 연결하여 배치 로이 작업을 수행 할 수 있습니다. 지금까지 나는 ls -l | grep -i 2012
제공 한 날짜에 2012 년 파일 만 뱉어 냈습니다 ls -l
. 이제, 그 트릭은 cp
모든 파일을 새 디렉토리로 가져 오는 것입니다. 각 파일을 복사해야하기 때문에 다음으로 어디로 가야할지 모르겠습니다. 다음 명령 세트는 무엇입니까?
답변
사용하지 마십시오 ls
. 그러한 경우에는 사용하지 않는 것이 좋습니다. 또한 grep
날짜에 따라 필터링하는 것은 좋은 생각이 아닙니다. 2012
2012 년에 파일 이름이 수정되지 않았더라도 파일 이름 자체에 문자열이 포함될 수 있습니다 .
find
명령을 사용 하고 출력을 파이프 하십시오 .
find . -newermt 20120101 -not -newermt 20130101 -print0 | xargs -0 cp -t /your/target/directory
여기,
-newermt 20120101 ==> File's modified date should be newer than 01 Jan 2012
-not ==> reverses the following condition. Hence file should be older than 01 Jan 2013
-print0 and -0 ==> Use this options so that the command doesn't fail when filenames contain spaces
답변
오래된 디스크에 무시하고 싶은 최신 파일이 있다면 다음과 같이 할 것입니다.
- 내가 원하지 않는 파일과 원하는 파일을 분리하는 수정 날짜로 임시 마커 파일을 만듭니다.
- 마커 파일보다 오래된 파일을 새 위치로 복사
다음은 새로운에서 이전 디스크에서 디렉토리 계층 구조를 유지하려는 가정이 샘플 명령은, (있는 cpio
유사한 복사 명령한다 tar
또는 pax
) :
touch -t 201201010000 /tmp/marker # YYYYMMDDhhmm == Jan 1st, 2012
cd /path/to/old/disk
find . -type f \! -newer /tmp/marker -print0 | cpio -pmd0 /path/to/new/disk
답변
아마도이 문제는 귀하의 문제와 매우 동일하다고 생각합니다. 하위 디렉토리를 만들고 날짜별로 파일을 구성하십시오.
해당 문제의 첫 번째 답변을 기반으로이 새 스크립트를 작성합니다.
for x in *; do
d=$(date -r "$x" +%Y)
mkdir -p "/your/new/directory/$d"
mv -- "$x" "/your/new/directory/$d/"
done
-
이 스크립트를
copy.sh
이전 디렉토리에 이름이 지정된 파일 에 작성하십시오. -
를
/your/new/directory
새 디렉토리 경로로 바꾸십시오. -
이 파일을 실행 파일로 만드십시오.
chmod +x copy.sh
-
그런 다음이 파일을 실행하십시오.
./copy.sh
답변
배치 작업에는 배치 도구를 사용해야합니다. 그렇게하려면 일반적으로 예를 들어 cp
복사 된 각 파일에 대해 별도의 프로세스를 호출하는 것이 아니라 단일 스트림으로 모든 레코드를 읽거나 쓰는 것이 수반됩니다 .
여기에 이미 cpio
작성된 답변이 있습니다. 이미 제공된 옵션 만 제공하면 내가 선택한 것입니다. 그러나이 cpio
형식은 pax
전성기부터 개선되어 표준화 된 아카이브 형식으로 접혔습니다 . 동일합니다 tar
.
엄격하게 POSIX- pax
는 파일 수정 시간을 기준으로 아카이브 멤버를 직접 필터링하는 옵션을 제공하지는 않지만 표준은 %T
목록 모드 형식 수정자를 지정합니다 . 여전히, pax
내가 아는 가장 일반적으로 사용 가능한 구현 ( mirabilos 가 유지 관리하는 BSD 버전) 은 이것을 직접 액세스 가능한 CLI 스위치로 확장합니다.
예를 들어 ./
이전 ccyymmddHHMM
에 마지막으로 수정 된 트리의 모든 파일 만 복사 하려면 /target/dir
다음을 수행하십시오.
pax -rwT,201301010000 ./ /target/dir
하위 디렉토리로의 재귀를 피하려면 대신 다음을 수행하십시오.
pax -rwdT,201301010000 ./* /target/dir
자세한 내용은 man
페이지를 참조하십시오 .