최근에 수정된 파일을 찾아서 복사하려고 합니다. 이 작업을 수행하는 동안 그 안에 많은 하위 디렉터리와 데이터 파일이 유지되도록 노력합니다 dir1
.dir1
지금까지 제가 정리한 내용은 다음과 같습니다. 그러나 mtime
파일 내용이 업데이트되면 디렉토리의 내용은 업데이트되지 않습니다. 또한 나는 이 cp 명령이 변경된 파일뿐만 아니라 디렉토리의 모든 파일을 복사할 것이라고 믿습니다.
find /NAS/data/dir1 -type d -mtime -1 -exec cp -at /mnt/databackup/dir1 {} +
그것을 사용하면 -type f
폴더 구조가 유지되지 않습니다.
답변1
find ... -type f
bash for 루프와 함께 를 사용할 수 있습니다 . 루프에서 mkdir -p
및 조합을 사용하면 dirname
cp를 사용하여 각 파일을 복사하기 전에 폴더 구조를 다시 만들 수 있습니다.
#!/bin/bash
dirA="/NAS/data/dir1/"
dirB="/mnt/databackup/dir1/"
while read -r file
do
relative="${file##"$dirA"}"
newfile="$dirB$relative"
echo mkdir -p "$(dirname "$file")"
echo cp -at "$file" "$newfile"
done < <(find "$dirA" -type f -mtime -1)
read
bash 내장 기능입니다. 일반적으로-r
일부 극단적인 경우 문제를 방지하는 데 사용됩니다 . .txt 파일에서 한 번에 한 줄씩 읽습니다stdin
. 여기, 이것이stdin
출력입니다find
.${var##string-to-remove}
형식이다매개변수 대체newfile="$dirB$relative"
. 이것은 고전적인 bash 연결입니다.$()
. 이 bash 구성은 다음과 같습니다.명령 대체mkdir -p
필요에 따라 디렉토리와 모든 상위 항목을 만듭니다.cmd < file
이는 고전적인 리디렉션입니다.<(cmd)
이것은 ... 불리운다프로세스 교체. 파일 이름을 명령의 stdin[>()
] 또는 stdout[ ] 에 대한 핸들로 바꿉니다<()
.
당신은 할 수explainshell.com을 이용하세요더 자세한 설명을 원하시면.