나는 최근에 지난 학기의 두 번째 하드 드라이브가 나에게 실패하기 시작했고 새로운 드라이브를 고스트 할 수 없게되었습니다. 나는 여전히 실패한 첫 번째 hd를 가지고 있었으므로 드라이브를 고스트했지만 이제는 첫 번째 고 스팅 (첫 번째 실패한 hd-> 두 번째 실패한 hd) 날짜 이후 변경된 모든 파일과 항목을 새 드라이브 (모든 날짜-> 세 번째 작업 hd 이후 두 번째 실패한 HD 파일). 리눅스 터미널에서 이것을 스크립트하거나 다른 프로그램을 사용하는 쉬운 방법이 있습니까?
다음 명령을 사용하여 살펴 보았지만 처음 몇 개의 폴더가 아카이브 된 후에는 성공하지 못했고 실패했습니다.
find . -type f -mtime -58 |xargs tar --no-recursion -czvf allmodified.tgz
tar czvf allmodified.tgz `find . -type f -mtime -58`
찾기 코드가 작동하고 필요한 드라이브에서 모든 파일을 찾습니다.하지만 파일 구조로 아카이브하여 새 드라이브에서 파일의 압축을 풀 수있는 방법을 찾을 수 없습니다 (세 번째 hd 작업). 지난 2 개월 동안 있었던 곳에 보존하십시오.
나는 내 문제를 설명하는 데 최고가 아니므로 혼란 스러우면 질문을하고 최선을 다해 답변 해 드리겠습니다.
어떤 힌트라도 도움이됩니다. 대단히 감사합니다!
답변
두 번째 예제에서 파일 이름의 공백을 보호하지 않았기 때문에 아마도 실패했을 것입니다. 호출은 약간 다릅니다.
find . -type f -mtime -58 -print0 | tar -czvf allmodified.tar.gz --null -T -
여기에서 문자로 find
끝나는 파일 경로를 출력합니다 NUL
. 이것들은로 파이프되어 tar
stdin ( -T -
) 에서 입력 을 널 ( --null
)로 구분하여 읽습니다 . 은 --no-recursion
당신이 당신의 타르볼의 디렉토리 자신을 포함하지 않습니다 때문에 필요가 없습니다.
참조 : GNU 타르 1.27 : 파일에서 6.3 독서 이름
그런 다음, 동일한 디렉토리에서 아카이브를 추출하여 파일이 속한 디렉토리에 배치합니다. 참고 tar
합니다 기존 파일을 덮어 쓸 추출에. 이를 방지하려면 --skip-old-files
옵션을 사용하십시오 .
두 번째 예제의 경우 파일 또는 경로에 공백이 포함되어 있으면 tar
두 파일 foo bar
과 baz
( find
출력)이 3으로 표시 되므로 실패합니다 tar foo bar baz
. 이것에 대처하는 적절한 방법은 파이프의 출력 find
과 -print0
그 명령이 읽을 수있는 스위치가있는 경우, 다음 커맨드 NUL
(GNU 대부분 유틸리티 않음) -delimited 입력.