Gnu / Linuxコマンドラインインターフェイス(grep、ls、およびcatを使用)に関する質問

Gnu / Linuxコマンドラインインターフェイス(grep、ls、およびcatを使用)に関する質問

スタックエクスチェンジ様、こんにちは。

私の目標lsディレクトリ構造全体を検索してgrepファイルを読み取るcats.pyために使用されます。私はこれがGnu / Linuxの誕生のように聞こえることを知っています。catcats.py

私は現在bashStack Exchangeを初めて使用していますので、形式が都合なくてもご了承ください。

ls -R -l -t -r | grep cats次を返す次のコマンドを実行します。

rw-r--r-- 1 user user 2179 Mar 18 08:53 cats.py

上記で返されたファイルを読み取るためにcatを使用しようとしましたが、grepコマンドの結果にプレースホルダを割り当てる方法に問題が発生しました。ここに私が試した内容と結果を示します。

ls -R -l -t -r | grep cats | cat cats.py
cat: cats.py: No such file or directory

問題はcat関数の実行方法にあると思います。次のようにする必要があります。

ls -R -l -t -r | grep cats | cat '{}'

または

ls -R -l -t -r | grep cats && cat cats.py

答え1

findコマンドがより適切になります。

find . -name 'cats.py' -exec cat {} \;

答え2

findコマンドを使用してください。ファイルを見つけてコマンドを実行できます。ls特に-lオプションが提供されると、必要以上に多くのデータ(ファイルモード、日付、所有者など)があるため問題になります。

つまり、(<>のビットを交換)

find «directory» -name '«file-name-glob-pattern»' -exec «command» {} \;

例えば

find . -name 'cats.py' -exec cat {} \;

答え3

代わりにfind -exec拡張ワイルドカードを使用してください。

shopt -s extglob
cat **/cats.py

オプション:extglobオプションの設定を解除します。

shopt -u extglob

これは-exec cat {} +次のようになります。-exec cat {} \;

最初の実行は次のとおりです。

cat file1 file2 file3

後者は以下を実行します。

cat file1
cat file2
cat file3

この例では、出力は同じですが、最初の出力はより速く実行されます。

答え4

きれいではありませんが、好きなようになるようです。

cat `sudo ls -R -l -t -r | grep cats | awk '{print $9}'`

cat `sudo ls -R -l -t -r | grep `Local\ State` | awk '{print $9}'`

関連情報