私は、リモートパスがディレクトリ(またはシンボリックリンクディレクトリ)または読み取り可能なファイルを指していることを確認するための短くて簡単な方法を探しています。
ディレクトリの場合は、scp
特定のファイルをそのディレクトリ内からローカルシステムに転送できますが、ファイルの場合はscp
そのファイルでのみ作業できます。
私が知っていたファイルパスscp
はuser@host:/path/to/dir-or-file
。
bash
注:ローカルシステム(WindowsのMobaXterm)では使用できますが、リモートシステム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
最初にパス名をファイルとして取得できない場合は、2番目の呼び出しでディレクトリ内の特定のファイルを取得できます。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」(リンク)です。