원격 경로가 디렉터리인지 파일인지 확인하는 방법은 무엇입니까?

원격 경로가 디렉터리인지 파일인지 확인하는 방법은 무엇입니까?

나는 원격 경로가 디렉토리(또는 심볼릭 링크 디렉토리) 또는 읽을 수 있는 파일을 가리키는지 확인하는 짧고 간단한 방법을 찾고 있습니다.

디렉터리인 경우 scp여러 특정 파일을 해당 디렉터리 내부에서 로컬 시스템으로 전송할 수 있지만, 파일인 경우 scp해당 파일로만 작업할 수 있습니다.

제가 알려드린 파일 경로 scpuser@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

scpoptions 없이 디렉토리를 전송하라는 지시를 받으면 -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"(링크)입니다.

관련 정보