![여러 열거형 파일을 재동기화하는 방법](https://linux55.com/image/219703/%EC%97%AC%EB%9F%AC%20%EC%97%B4%EA%B1%B0%ED%98%95%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9E%AC%EB%8F%99%EA%B8%B0%ED%99%94%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
data_1.mat, data_2.mat, ..., data_n.mat 파일이 있다고 가정합니다. 한 줄의 코드로 이러한 파일을 다른 폴더에 어떻게 동기화할 수 있나요?
내가 아는 유일한 방법은 for 루프에서 이 작업을 수행하는 것입니다.
for i in 1..n
do
rsync 'data_$i' \dest\
done
서버에서 데이터를 전송하는 경우 for 루프에서 매번 새 SSH를 설정해야 하므로 편리하지 않습니다.
답변1
쉘 와일드카드를 사용하여 관련 파일 세트를 일치시킬 수 있습니다.
cp -p data_*.mat /dest/
주장하면 작동 rsync
하지만 설명에 따르면 사용하기에 잘못된 도구일 수 있습니다.
rsync -a data_*.mat /dest/
두 경우 모두 쉘(명령 아님)은 data_*.mat
일치하는 모든 파일/디렉토리 목록으로 확장되거나 일치하는 항목이 없으면 변경되지 않은 상태로 유지됩니다. ( *
와일드카드는 0개 이상의 문자와 일치하며 ?
정확히 한 문자와 일치합니다.)
가능한 일치 항목의 하위 집합 인 경우 1..n
조금 더 어렵지만 많이는 아닙니다. 일부 쉘( 포함 bash
)은 고정된 범위 내에서 버팀대 확장을 허용합니다 {1..27}
. 이것을 패턴에 연결하면 또 다른 해결책이 있습니다.
cp -p data_{1..27}.mat /dest/
echo
와일드카드 패턴을 사용할 때 이를 확장하는 것은 셸이므로 무슨 일이 일어날지 확인하기 위해 명령 에 넣지 못할 이유가 없습니다 .
echo data_?.mat
echo rsync -a data_*.mat /dest/
echo cp -p data_{1..27}.mat /dest/
답변2
다음과 같은 명령을 사용하여 필요한 모든 파일 목록을 미리 생성할 수 있습니다.
seq -f "data_%.0f.mat" 1 11
그러면 다음이 생성됩니다.
data_1.mat
data_2.mat
data_3.mat
...
data_11.mat
그런 다음 사용할 수 있습니다
rsync –files-from=/path/of/file/with/above_list .....