오래된 하드 드라이브에 있는 사진을 잔뜩 모아 정리하려고 합니다. 를 실행하면 ls -l
이러한 모든 파일의 생성 날짜가 2012년 이전임을 알 수 있습니다. 이상적으로는 자동으로 설치되도록 설정되지 않은 내 컴퓨터의 두 번째 하드 드라이브로 옮기고 싶습니다. 바람직하게는 몇 가지 명령을 함께 연결하여 일괄적으로 수행할 수 있습니다. 지금까지 나는 ls -l | grep -i 2012
제공된 2012년 날짜의 파일만 뱉어냈습니다 ls -l
. 이제 비결은 cp
이러한 모든 파일을 새 디렉터리에 추가하는 것입니다. 모든 파일을 복사해야 하기 때문에 다음에 어디로 가야 할지 잘 모르겠습니다. 다음 명령 세트는 무엇입니까?
답변1
사용하지 마세요 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
답변2
이전 디스크의 새 파일을 무시하려면 다음과 같이 하세요.
- 내가 원하는 파일과 원하지 않는 파일을 분리하기 위해 수정된 날짜가 포함된 임시 태그 파일을 만듭니다.
- 표시된 파일보다 오래된 파일을 새 위치로 복사합니다.
다음은 새 디스크에 있는 이전 디스크의 디렉터리 계층 구조를 유지한다고 가정하는 명령의 예입니다( 또는 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
답변3
내 생각에 이 문제는 귀하의 문제와 매우 유사할 수 있습니다. 다음을 살펴볼 수도 있습니다.하위 디렉터리를 만들고 날짜별로 파일을 정리하세요.
나는 이 질문에 대한 첫 번째 대답을 바탕으로 이 새로운 스크립트를 작성했습니다.
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
답변4
일괄 작업에는 일괄 처리 도구를 사용해야 할 수도 있습니다. 이를 수행하려면 일반적으로 cp
복사된 각 파일에 대해 별도의 프로세스를 호출하는 대신 단일 스트림의 모든 레코드를 읽고 써야 합니다 .
여기에 답변이 작성되었습니다 cpio
. 아마도 귀하에게 제공된 옵션을 고려하여 선택할 것입니다. 그러나 전성기 이후에는 cpio
형식이 개선되어 표준화된 pax
아카이브 형식으로 통합되었습니다. 도 이렇습니다 tar
.
엄격한 POSIX - pax
표준에서는 %T
목록 모드 형식 수정자를 지정하지만 파일 수정 시간을 기준으로 아카이브 구성원을 직접 필터링하는 옵션을 제공할 가능성은 거의 없습니다. 그럼에도 불구하고, pax
내가 아는 한, 가장 일반적으로 사용되는 구현은 다음에서 관리하는 BSD 버전입니다.미라빌로스- 실제로 이를 직접 액세스 가능한 CLI 스위치로 확장했습니다.
예를 들어, ./
Last Modified 에 루트가 있는 트리의 모든 파일 만 복사하려면 다음을 수행할 수 있습니다 ccyymmddHHMM
./target/dir
pax -rwT,201301010000 ./ /target/dir
하위 디렉터리로 반복되는 것을 방지하려면 다음을 수행할 수 있습니다.
pax -rwdT,201301010000 ./* /target/dir
보다man
자세히 알아보려면 페이지를 방문하세요.