/dir/
多くのフォルダを含むディレクトリがあるとします。一部のフォルダ名は数字などです1, 2, 64346, 2353, 3
。一部には古典的な名前some_name, some_other_name, another_name
などが含まれています。名前に数字のみのディレクトリをリモートからローカルホストにコピーするにはどうすればよいですか?
似たようなものを探しています。scp -r username@host:/dir/[all_numerical_names] .
どんなアイデアにも感謝します。
答え1
私は、リモートファイル/ディレクトリ名を完全な番号などの基準に一致させる方法がないことを知っています。しかし、あなたがそれを使用しているので、scp
それも利用可能であると仮定するのがssh
合理的に見えます。これに基づいてトラブルシューティング方法を考えてみましょう。
rhost="user@remoteHost" # Fix as appropriate
rpath="/dir" # Likewise
ssh -qn "$rhost" "find '$rpath' -maxdepth 1 -type d -print0" |
while IFS= read -r -d '' item
do
if [[ "$item" =~ ^(.*/)?[0-9]+$ ]]
then
# Numeric directory
echo "Copying $item" >&2 # Optional
scp -r "$rhost":"$rpath/$item" . # Maybe -a instead of -r
fi
done
ガイドライン
find
リモートシステムにGNUが必要です(の場合-print0
)。bash
ローカルシステムが必要(read
REと比較して)- 証明書ベースの認証を強くお勧めします(パスワードは繰り返し必要ありません)。
$rpath
二重引用符または一重引用符を含めることはできません。
find
リモートシステムでGNUが利用できない場合は、simpleに-print0
置き換えて-print
調整できます。ただし、「奇妙な」ディレクトリ名(たとえば、除外する必要があるディレクトリ名)を使用すると、予期せず実行される可能性があります。read -r -d '' item
read -r item
$'123\ntext\n456'