数値名のあるフォルダのみコピー

数値名のあるフォルダのみコピー

/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ローカルシステムが必要(readREと比較して)
  • 証明書ベースの認証を強くお勧めします(パスワードは繰り返し必要ありません)。
  • $rpath二重引用符または一重引用符を含めることはできません。

findリモートシステムでGNUが利用できない場合は、simpleに-print0置き換えて-print調整できます。ただし、「奇妙な」ディレクトリ名(たとえば、除外する必要があるディレクトリ名)を使用すると、予期せず実行される可能性があります。read -r -d '' itemread -r item$'123\ntext\n456'

関連情報