さらなる処理のためのファイル「選択」

さらなる処理のためのファイル「選択」

Midnight Commanderなどのファイルマネージャを使用するのは良い機会かもしれませんが、シェルでこれを行うためのエレガントな方法があるかどうかを知りたいです。

あるディレクトリから別のディレクトリにファイルをコピーしたいとしましょう。ディレクトリは大きく、ファイル名は長くて複雑で、部分的には秘密です。正確な名前はわかりませんがpenguin

  1. 初めて検索find . -iname "*penguin*" | less

  2. 結果を見てみましょう。

    ./l1fe_of_Penguins
    ./Fw0rld_Of_penguins
    ./FUnNy_penguin
    
  3. 「Funny Penguin」ファイルをコピーしたいです。その後、複雑なファイル名のいくつかの関連部分を覚えていて、それをシェルコマンドに入力しました。

    cp FUn*penguin /media/share
    

どうすればより速くできますか?フルテキストモードで検索結果のコマンドライン引数でファイル名を取得するには?

答え1

Tabキーを使用して、ほとんどのシェルのファイルシステムパスを自動補完できます。

bashはこれとそれ以上をサポートします。

しかし、私が遭遇した最もインタラクティブなシェルはzshですが、ここにはカスタム設定ファイルがあります。grmlのzsh設定そしてああ、

zshを使用すると、自動補完のためにglobを使用でき、一度に複数のファイルを完成させることもできます。

どのタイプのUnixやLinuxを使用しているのかわからない場合でも、私が言うことができる最善の方法は、ソフトウェアリポジトリを確認するか、直接zshをコンパイルすることです。

Penguinについて言及したので、Linuxを使用しているとし、パッケージマネージャに次のことを確認してください。

zsh

高度なrcファイルの場合、シェルは多くの素晴らしい機能をサポートできます。

grml-zsh-config
oh-my-zsh

答え2

私はこれを行う方法を見つけました:

find . -iname "*penguin*" | pick | xargs -J % cp -i % /media/share

答え3

-execオプションを使用すると、find次のコマンドを実行することもできます。

find . -iname "*penguin*" -exec cp {} /media/share \;

これは{}名前に置き換えられます。

ところで。man findすごい! :)

答え4

これを試してみてください。

出力に満足したら、echoコマンドを削除してください。

find . -iname "*penguin*" | awk '/penguin$/' | while read filename
do
    echo "cp ${filename} /media/share"
done

関連情報