특정 소유자의 모든 파일을 scp하는 방법은 무엇입니까?

특정 소유자의 모든 파일을 scp하는 방법은 무엇입니까?

특정 소유자의 모든 파일을 scp하고 싶습니다. 예를 들어, 이것이 내 출력이라면 ls -la:

-rw-rw-r-- 1 owner1 ad   704 Jun  1 18:16 file1
-rw-rw-r-- 1 owner2 ad   798 May 29 11:15 file2
-rw-rw-r-- 1 owner2 ad   881 May 29 09:28 file3
-rw-rw-r-- 1 owner3 ad   936 May 29 09:28 file4
-rw-rw-r-- 1 owner1 ad  1012 Jun  1 15:14 file5

소유자 1과 3이 있는 모든 파일을 scp하고 싶으므로 file1, file4file5.

비슷한 게 있나요

scp [email protected]:/path/to/folder/* . --owner owner1 owner2

답변1

가장 효율적이고 안전한 방법은 아마도 다음과 같습니다 find | tar | tar.

ssh [email protected] 'cd /path/to/folder; find . \( -user owner1 -o -user owner3 \) -print0 | tar --null -T - -cf -' | tar -xvf -

tar 아카이브를 추출하기 전에 tar 아카이브의 내용을 살펴보는 것이 좋습니다. 마지막을 다음 | tar -xvf -으로 바꾸고 | tar -tvf -실행하여 파일 목록을 가져옵니다.

답변2

이 작업을 수행하는 더 짧은 명령/방법이 있는지 확실하지 않지만 다음과 같이 작동합니다.

for i in * ; do [[ $(stat -c %U ./"$i") =~ owner1|owner3 ]] && scp -p [email protected]:/path/to/folder/ ./"$i"  ; done

stat -c %U현재 디렉터리의 모든 파일을 사용하여 소유자를 확인하고 scp소유자가 소유자 1 또는 소유자 3이면 파일 처리를 계속합니다.

답변3

원격 서버가 SFTP를 지원하고 클라이언트가 이를 허용하는 경우퓨즈을 누른 다음 원격 디렉터리를 마운트합니다.SSHFS. 그러면 로컬 파일과 원격 파일에 대해 걱정하지 않고 작업할 수 있습니다. 둘 다 파일입니다.

mkdir ~/mnt
sshfs [email protected]:/path/to/folder ~/mnt

이제 일부 사용자가 소유한 파일을 이 디렉터리에 복사해야 합니다 ~/mnt. 현재 디렉터리의 모든 파일에 대해 이 작업을 수행하려면(하위 디렉터리의 파일은 제외):

find . -name . -o -type d -prune -o \( -user owner1 -o owner3 \) -exec cp -p {} ~/mnt \;

현재 디렉터리를 재귀적으로 탐색하여 모든 파일을 대상 디렉터리에 넣습니다. 이름 충돌이 있으면 다음 메시지가 표시됩니다.

find . \( -user owner1 -o owner3 \) -exec cp -ip {} ~/mnt \;

현재 디렉터리를 재귀적으로 탐색하고 반대쪽에 디렉터리 트리를 재현하려면 다음 중 하나를 사용할 수 있습니다.

find . \( -user owner1 -o owner3 \) -print0 | cpio -p0 ~/mnt
find . \( -user owner1 -o owner3 \) -exec pax -rw -pe {} ~/mnt \;

zsh가 있으면 zsh를 사용하여 소유자별로 파일을 선택할 수 있으므로 훨씬 더 간단합니다.글로벌 예선.

cp -p -- *(uowner1,uowner3) ~/mnt                   # not recursive
cp -ip -- **/*(uowner1,uowner3) ~/mnt               # recursive, flattened
zmv -C -Q -o-p '**/*(uowner1,uowner3)' '~/mnt/$f'   # reproduce tree

원격 파일 작업이 끝나면 파일 시스템을 마운트 해제합니다.

fusermount -u `/mnt
rmdir ~/mnt

관련 정보