1

次のようなディレクトリがあります。

dir
dir/somefile.txt
dir/subdir/subsub/somefile2.txt
dir/subdir2/somefile.txt

コマンドの単一インスタンスですべてのサブディレクトリ内のすべてのファイルを開きたい。-exec または xargs で検索しようとしましたが、これらはコマンドの個別のインスタンスで各ファイルを開きます。

基本的に、最終的に のよう kate dir/somefile.txt dir/subdir/subsub/somefile2.txt dir/subdir2/somefile.txtになるものが必要ですが、任意の数のサブディレクトリ内の任意の数のファイルが必要です。私は bash を使用していますが、スクリプトの提案は問題ありません。

明確化: .txt ファイルだけを意味するのではなく、任意の ascii ファイル (つまり、.php、.txt、.html など) を意味していました。

4

4 に答える 4

3

これにはいくつかの可能なオプションがあります。これらの回答は、すべてのファイルを kate で開くことができることがわかっていて、任意の拡張子のファイルを開きたいというシナリオに基づいています。

find dir -type f -exec kate {} +  

kate $(find dir -type f)

kate `find dir -type f`

2 番目と 3 番目の形式はほぼ同等です。主な違い[1]は、最初のバージョンは名前に空白を含むファイルを処理するのに対し、2 番目と 3 番目のバージョンは処理しないことです。

[1] NVRAM を指摘してくれてありがとう。最初に回答を投稿したときは気づきませんでした。

于 2009-12-02T23:06:54.083 に答える
3

試す

kate `find . -name \*.txt -type f`

これ-type fにより、ディレクトリにアクセスできなくなります。

ls -1の代わりに使用する例を次に示しkateます。

edd@ron:~/src/debian/R$ ls -1 `find . -type f -name \*.txt`
./R-2.10.0/src/extra/graphapp/readme.txt
./R-2.10.0/src/extra/xdr/copyrght.txt
./R-2.10.0/src/extra/xdr/README.txt
./R-2.10.0/src/gnuwin32/fixed/etc/rgb.txt
./R-2.10.0/src/gnuwin32/installer/CustomMsg.txt
./R-2.10.0/src/library/grid/inst/doc/changes.txt
./R-2.10.0/src/unix/system.txt
./R-2.9.2-ra-1.2.8/src/extra/graphapp/readme.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/copyrght.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/README.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/fixed/etc/rgb.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/installer/CustomMsg.txt
./R-2.9.2-ra-1.2.8/src/library/grid/inst/doc/changes.txt
./R-2.9.2-ra-1.2.8/src/unix/system.txt
edd@ron:~/src/debian/R$

サブディレクトリ内のすべてのファイルが本当に必要な場合、呼び出しは次のように簡素化されます

kate `find . -type f`

あなたがいる場合、dir/またはそうでない場合

kate `find dir -type f`
于 2009-12-02T23:07:37.903 に答える
2

kate $(find dir -type f)

于 2009-12-02T23:06:07.777 に答える
0

xargsあなたがやろうとしていることはまさにxargs が解決するように設計されている問題であるため、あなたは にあまり慣れていないか、正しく使用していません:プログラムが取ることができる引数の数に関するシステム制限を超えないようにしながら、できるだけ少ない実行でプログラムを実行します。

あなたは正しいですfind ... -execが、それも修正できます。コマンド+の最後に を追加するだけで、 のように動作します。findxargs

上記のソリューションkate $(...)(またはバッククォートを使用した同等のソリューション) は、一般的には機能しません (スペースを含むファイル名をサポートしていないため、ファイルのリストが非常に長い場合はまったく実行されません)。両方ともfind ... +xargsこれらの制限を回避します。

于 2009-12-03T04:41:49.790 に答える