GNU/Linux >> Linux の 問題 >  >> Linux

cp ファイルのみ、ディレクトリをスキップ

cp の代わりに rsync を使用することをお勧めします。空のフォルダーを除外するオプション -m がある場合は、次のようにします。

rsync -am <origin> <destination>

コマンドの説明は Explainshell.com にあります

-a オプションを使用しているのは、多くの優れたデフォルト アクションを実行するためですが、再帰モードのみを設定する -r オプションを使用することもできます。

[コメントを追加]

cp でこれを行う方法を知りません。少なくとも man ページには、それを行うオプションが表示されていません。コマンド find を使用して、より複雑なソリューションを実行できる可能性があります。 コピーするファイル/ディレクトリのリストを見つけてからcpに渡しますが、それはrsyncよりもはるかに複雑です. rsync は、多くの Linux でほぼ標準です


cp 確かにファイルのみを取得するオプションはありませんが、berserck が言ったように、 find を使用できます cp と一緒に .実際、これは非常に簡単です:

# Copy only files
find /path/to/file -type f -execdir cp "{}" /dest/path ";"

または:

# Copy everything except directories
find /path/to/file -not -type d -execdir cp "{}" /dest/path ";"

説明

find 必要なファイルを探すツールです。最初のオプションでは、-type f を設定します 通常のファイルのみを返します。 2 番目のオプションでは、-not -type d を設定します。 ディレクトリ以外のすべてを取得します。 find -execdir に渡された引数を実行します {} を置き換える 一度に 1 つの結果エントリで、; のときにコマンドを停止します が見つかりました (; \; でエスケープする必要があります または ";" 、またはシェルが展開する可能性があります)。

-execdir ファイルのフォルダを「作業ディレクトリ」としてコマンドを実行します。これは -exec の代わりに推奨されます 、以下をチェックしてください。

-type オプションのドキュメント:

<ブロック引用>

-タイプ c

ファイルのタイプは c:

b:ブロック (バッファ) スペシャル

c:文字 (バッファなし) スペシャル

d:ディレクトリ

p:名前付きパイプ (FIFO)

f:通常ファイル

l:シンボリック リンク。シンボリック リンクが壊れていない限り、-L オプションまたは -follow オプションが有効な場合、これは当てはまりません。 -L が有効なときにシンボリック リンクを検索する場合は、-xtype を使用してください。

s:ソケット

D:ドア (Solaris)

-not オプションのドキュメント:

<ブロック引用>

! expr

expr が false の場合は true。通常、この文字はシェルによる解釈からの保護も必要です。

-not expr

と同じ ! expr ですが、POSIX 準拠ではありません。

-execdir オプションのドキュメント:

<ブロック引用>

-exec コマンド;

コマンドを実行; 0 ステータスが返される場合は true。以降の find の引数はすべて、「;」で構成される引数まで、コマンドの引数と見なされます。遭遇します。文字列 '{}' は、コマンド [...] の引数に出現するすべての場所で、処理中の現在のファイル名に置き換えられます。これらの構造は両方とも、シェルによる展開から保護するために ('\' で) エスケープするか、引用符で囲む必要がある場合があります。指定されたコマンドは、一致したファイルごとに 1 回実行されます。コマンドは開始ディレクトリで実行されます。 -exec アクションの使用には、避けられないセキュリティ上の問題があります。代わりに -execdir オプションを使用してください。

-execdir コマンド;

-exec と同様ですが、指定されたコマンドは、一致したファイルを含むサブディレクトリから実行されます 、これは通常、検索を開始したディレクトリではありません。これは、一致したファイルへのパスの解決中に競合状態を回避するため、コマンドを呼び出すためのはるかに安全な方法です。 [...] このオプションを使用する場合は、$PATH 環境変数が「.」を参照していないことを確認する必要があります。そうしないと、攻撃者は、-execdir を実行するディレクトリに適切な名前のファイルを残すことで、任意のコマンドを実行できます。 $PATH に空または絶対ディレクトリ名ではないエントリがある場合も同様です。

https://linux.die.net/man/1/find


Linux
  1. findコマンドを使用してLinux上のファイルとディレクトリを検索します

  2. Linuxコマンド:テキストファイルのみを「検索」する方法は?

  3. コマンド「ls -d」でディレクトリが表示されません。ファイルとディレクトリの代わりにディレクトリのみを表示するように「ls」を取得する方法はありますか?

  1. Linuxでファイルとディレクトリをコピーする

  2. 複数のディレクトリを個々のZipファイルに圧縮するコマンド?

  3. LinuxのNOTディレクトリのディレクトリ内のファイルのみを削除します

  1. Linuxを使用してディレクトリとファイルを削除する方法

  2. Linuxでのコマンドの検索(ファイルとディレクトリの検索)

  3. Linux unzip コマンド:上書きを強制するオプション?