どのように私は、コマンドの引数として現在のすべてのファイルとサブディレクトリを追加しますか?
-
11-09-2019 - |
質問
私はこのようなディレクトリがあります:
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を、など。)の
解決
試してみてください。
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`
他のヒント
これにはいくつかの可能なオプションがあります。あなたはすべてのファイルがケイトで開くことができます知っている、とあなたが任意の拡張子を持つファイルを開きたい場所をこれらの回答は、あなたのシナリオに基づいています。
find dir -type f -exec kate {} +
<時間>
kate $(find dir -type f)
<時間>
kate `find dir -type f`
第二及び第三の形態はほぼ同等です。 [1]主な違いは、第2、第3のがいない間、最初のバージョンは、自分の名前に空白文字を含むファイルを処理するということです。
私が最初に答えを投稿するとき、[1] NVRAMにこれを指摘してくれてありがとう、私は実現しなかった。
kate $(find dir -type f)
あなたはどちらかxargs
に非常に慣れていない、またはあなたが何をしようとしていることは、の正確な問題のxargsのを解決するために設計されているので、あなたは、それを正しく使用していない:任意に与えられました文字列の長いリスト、プログラムが取ることができる引数の数がシステムの制限を超えていないながら、できるだけ少ない実行中のプログラムへの引数として渡すます。
あなたはfind ... -exec
ための右だが、それはまた、固定することができます。ただ、+
コマンドと出来上がりの最後にfind
を追加し、それがxargs
のように振る舞います。
その使用kate $(...)
(またはバッククォートと同等)上記の解決策はいずれも、(彼らは、スペースを含むファイル名をサポートしていないファイルのリストが非常に長い場合、まったく実行されません)一般的には動作しません。 find ... +
とxargs
の両方がこれらの制限を回避ます。