ディレクトリに移動せずに一意の名前のファイルをコピーするにはどうすればよいですか?

ディレクトリに移動せずに一意の名前のファイルをコピーするにはどうすればよいですか?

一意の名前を持つファイルがあるとします(例:スクリーンショット20180509143013.png)/media/SD256にコピーしたいです。

文書/メディア/ドライブ1/ユーザー/名前/写真/スクリーンショット/Screenshot20180509143013.pngナビゲートしたくない特定のサブディレクトリレベルで停止しました。/メディア/ドライブ1/ユーザー/名前/イメージ/スクリーンショット/一意の名前を持つファイルを探します。

代わりに、作業ディレクトリが/media/drive1/のときに次のコマンドを実行したいと思います。

copy --find-filename-then-copy Screenshot20180509143*3.png /dev/media/SD256/DestinationFolder

まず、ファイルを見つけてコピーするコマンドはありますか?

答え1

使用find:

find . -type f -name Screenshot20180509143013.png -exec cp {} /dev/media/SD256/DestinationFolder ';'

これはまさにその名前の現在のディレクトリの中または下にあるすべての一般的なファイルを探しますScreenshot20180509143013.png。見つかったファイルはにコピーされます/dev/media/SD256/DestinationFolder。同じ名前のファイルが複数ある場合(ないと仮定すると)、ファイルは互いに上書きされます。ターゲットディレクトリ。

答え2

またはzshまたは(または後)または後fishまたは:ksh -o globstarbash -O globstarshopt -s globstarbashtcshset globstaryash -o extended-glob

cp -- **/Screenshot20180509143*3.png /dev/media/SD256/DestinationFolder

globstar は**構文を使用して再帰検索を実行します。 globの残りの部分(ファイル名パターン)が一意であれば、目的の結果を得ることができます。たとえば、...3*3質問の前半のファイル名の代わりにあなたの例からコピーしました。Screenshot20180509143013.png

気づく:

  • fish4.3 以前のバージョンの bash は、反復時にシンボリックリンクに従います。zshtcshまたはを使用すると、この動作を代わりにyash使用できます。*****
  • fishファイルが現在のディレクトリにある場合、ファイルが見つかりません。
  • 隠しファイルと隠しディレクトリにあるファイルは考慮されません。多くのシェルにはdotglobそれを再度有効にするオプションがあります。(D)のグローバル修飾子を参照してくださいzsh
  • パターンの末尾に追加することzshもできます。コピーのみを行うグローバル修飾子です。([1])[1]最初ファイルを一致させます。
  • -iまた、このオプションは、ファイルが複数のディレクトリにある場合に誤って上書きされるのを防ぎます。cp

答え3

ZTE

を使用している場合は、次のようにワイルドカードをzsh使用できます。cpzsh

cp **/Screenshot20180509143013.png /dev/media/SD256/DestinationFolder

**/Screenshot20180509143013.pngScreenshot20180509143013.png現在のディレクトリから再帰的に検索を試みます。

汎用

find一般的な目的には常に+を使用できますcp

cp "$(find ./ -type f -name "<picture_name>" )" "<destination>"

find- ファイルを検索します。

./- 現在のディレクトリから検索します。

-type f- 通常のファイルに検索を制限します。

-name "<picture_name>"- 名前付きファイルの検索<picture_name>
*inは<picture_name>すべての順序と一致するために使用できます)

"$(find ./ -type f -name "<picture_name>" )"- コードのこの部分をstdoutoffindコマンドで置き換えます。

cp "$(find ./ -type f -name "<picture_name>" )" <destination>- ファイルパス"$(find ./ -type f -name "<picture_name>" )"をにコピ​​ーします<destination>

関連情報