나는 원격 경로가 디렉토리(또는 심볼릭 링크 디렉토리) 또는 읽을 수 있는 파일을 가리키는지 확인하는 짧고 간단한 방법을 찾고 있습니다.
디렉터리인 경우 scp
여러 특정 파일을 해당 디렉터리 내부에서 로컬 시스템으로 전송할 수 있지만, 파일인 경우 scp
해당 파일로만 작업할 수 있습니다.
제가 알려드린 파일 경로 scp
는 user@host:/path/to/dir-or-file
.
참고: 로컬 시스템(Windows의 MobaXterm)에서는 사용할 수 있지만 bash
원격 scp
시스템 ssh
(경로를 확인하려는 곳)은 전체 Linux 배포판입니다.
답변1
파일(파일인 경우) 또는 디렉토리의 일부(디렉토리인 경우)를 전송하려고 합니다.
if ! scp user@host:/path/to/dir-or-file local/path
then
scp user@host:/path/to/dir-or-file/some-specific-file local/path
fi
scp
options 없이 디렉토리를 전송하라는 지시를 받으면 -r
실패합니다. 이를 사용하여 원격 호스트의 지정된 경로가 디렉토리인지 감지한 다음 scp
처음에 경로 이름을 파일로 얻을 수 없는 경우 두 번째 호출을 통해 디렉토리 내의 특정 파일을 가져올 수 있습니다.scp
물론, 옮기고 싶다면모두디렉토리(디렉토리인 경우) 수행할 수 있는 작업
scp -r user@host:/path/to/dir-or-file local/path
경로가 디렉터리인지 파일인지에 관계없이 작동합니다.
답변2
다음 명령을 실행할 수 있습니다.
ssh user@host file /path/to/dir-or-file
결과는 가능한 파일 형식입니다:
/path/to/dir-or-file: directory
/path/to/dir-or-file: symbolic link to `whatever'
/path/to/dir-or-file: UTF-8 Unicode text
/path/to/dir-or-file: ELF 64-bit LSB executable ...
....
노트:bash 쉘 스크립트가 아닌 디렉토리만 테스트해야 하는 경우 다음과 같이 테스트를 사용할 수 있습니다.
ssh user@host test -d /path/to/dir-or-file
if [ $? -eq 0 ]; then
echo this is a dir
else
echo this is not a dir
fi
답변3
오류 메시지에 개의치 않고 점이 아닌 파일만 복사해야 하는 경우 빠르고 지저분한 방법은 다음과 같습니다.
scp -p asuser@host:'/path/to/dir-or-file/*' asuser@host:'/path/to/dir-or-file' .
후행 점은 원격 파일을 현재 디렉터리에 복사합니다. 입맛에 맞게 조절하세요. 이 -p
플래그는 타임스탬프와 권한을 보존합니다. 필수가 아닌 경우 생략하세요.
답변4
이 정보는 ls의 출력에서도 찾을 수 있습니다. 첫 번째 열의 첫 번째 기호는 "d"(디렉토리) "l"(링크)입니다.