scpを使用してディレクトリからリモートディレクトリにすべてのファイルをコピーするにはどうすればよいですか?

私の目標は、すべてのファイルをコピーすることだけです〜/ local_dir から [email protected] / var / www / html / target_dir scp を使用し、local_dirにlocal_dirカテゴリを作成しないでください。

/var/www/html/target_dir/files.. 

ただし

/var/www/html/target_dir/local_dir/files.. -rパラメーターを使用する場合

コメント

  • scp * [email protected]:/var/www/html/target_dirはあなたが望むことをしませんか?その場合は、編集して'しようとしていることの詳細をはこれまでに試しました。
  • 追加/。もはや動作しません。 詳細はこちら

回答

scp -r引数があります。したがって、次を使用してみてください。

$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir 

-r引数は、cpの-r argと同じように機能し、フォルダ全体とすべてのファイルおよびサブディレクトリを転送します。内部。

コメント

  • コマンドは/ var / www / html / target_dirにlocal_dirディレクトリを作成しました私の目標はファイルのみをコピーすることです。
  • 申し訳ありませんが、間違っています。次に、コマンドを繰り返しますが、次のようにします。$ scp -r ~/local_dir [email protected]:/var/www/html/必要に応じて新しいディレクトリの名前を変更します。
  • または$ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dirボートを浮かせます。
  • ワイルドカード*をドット.に変更すると、'ディレクトリ自体をコピーせずに、ディレクトリの内容(ドットファイルを含む)をコピーします。 scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
  • 残念ながら、.の使用は、実装が不十分なscp "バグ修正"(< superuser.com/questions/1403473/scp-error-unexpected-filename/ … )。 rsyncが有効な代替手段になります。

回答

If目標は、local_dirからすべてのファイルを転送することです。*ワイルドカードでうまくいきます:

$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir 

-rオプションは「再帰的」を意味するため、ディレクトリ全体または複数のディレクトリを転送する場合は、このオプションを記述する必要があります。

man scpから:

-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal. 

したがって、、最後の例ではファイルのみが転送されますが、-rオプションを設定すると、ファイルとディレクトリが転送されます。

コメント

  • 1+正解を得るには、受け入れられた回答のコメントを読む必要があるためですが、これは直接説明しているだけです。

回答

/.をに追加ソースディレクトリは、ディレクトリ自体ではなく、その内容を転送します。ワイルドカードソリューションとは対照的に、これには隠しファイルも含まれます。

$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir 

このソリューションのクレジットはroaimaに送られますが、次のように投稿する必要があると思いました。コメントだけでなく、実際の回答。

コメント

  • 残念ながら、このソリューションは、実装が不十分な "バグ修正"(< superuser.com/questions/1403473/scp-error-unexpected-filename/ … )。

回答

次の手順に従います。

  1. ディレクトリをコピーしますlocal_dirとそのすべてのサブディレクトリ:

    scp -r ~/local_dir [email protected] /var/www/html/target_dir 
  2. local_dirlocal_dir自体ではなくdiv>:

    scp -r ~/local_dir/* [email protected] /var/www/html/target_dir 
  3. 使用しないでください: scp -r ~/local_dir/. [email protected] /var/www/html/target_dir asエラーがスローされます(テストされ、次のエラーが発生しました):

    scp: error: unexpected filename: . 

コメント

  • 予期しないファイル名のエラーも表示されます。ただし、ワイルドカードを使用しても機能しません。これは、ワイルドカードが展開されたときに、ディレクトリにコマンドの文字数制限を超えるファイルが多すぎるためです。 macOS
  • @RichardKiefer :?のようなワイルドカードを使用できます。 *を指定して検索結果をさらに分離し、scpに渡します。次のリンクを試してください。ワイルドカード
  • Syedに感謝しますが、実際にはフォルダ内のすべての要素をターゲットにしたいということでした。 、フィルタリングしません。また、ディレクトリが多すぎると、ワイルドカードが機能しなくなります。
  • @RichardKiefer:リチャード、申し訳ありませんが、すべてのファイルをコピーするには、小さなbashスクリプトを使用できます。 ls -l | awk '{print $9}'を使用して、すべての出力(すべてのファイル名)をtxtファイルにリダイレクトします。 txtファイルを一度に1行ずつ読み取り、その入力をscpで使用して、ファイルをコピーします。input=/home/user/filename.txt while IFS= read -r line

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です