スタックエクスチェンジ様、こんにちは。
私の目標:ls
ディレクトリ構造全体を検索してgrep
ファイルを読み取るcats.py
ために使用されます。私はこれがGnu / Linuxの誕生のように聞こえることを知っています。cat
cats.py
私は現在bash
Stack 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}'`