ディレクトリ内の特定の名前を持つすべてのファイルを検索し、ls -lを適用してサイズを確認したいと思います。まずこれを使用しましたが、うまくfind . -name .ycm* | ls -l
いきません。説明は以下から得た。このリンク。
ls -l
その後、ディレクトリを繰り返し検索し、ファイル名を検索し、そのファイルに対して操作を実行するか、別のコマンドを実行するスクリプトを生成します。
次のスクリプトを使用しましたが、最初の呼び出し自体で停止して引き続き呼び出していることがわかりました。
#!/bin/bash
for_count=0
file_count=0
dir_count=0
search_file_recursive() {
# this function takes directory and file_name to be searched
# recursively
# :param $1 = directory you want to search
# :param $2 = file name to be searched
for file in `ls -a `$1``:
do
let "for_count=for_count+1"
echo "for count is $for_count"
# check if the file name is equal to the given file
if test $file == $2
then
ls -l $file
let "file_count++"
echo "file_count is $file_count"
elif [ -d $file ] && [ $file != '.' ] && [ $file != '..' ]
then
echo "value of dir = $1 , search = $2, file = $file"
search_file_recursive $file $2
let "dir_count++"
echo "directory_count is $dir_count"
fi
done
return 0
}
search_file_recursive $1 $2
これはエコーのない私の出力の様子です。
anupam … YouCompleteMe third_party ycmd ae8a33f8 … 5 ./script.sh pwd .ycm_extra_conf.py
Segmentation fault: 11
anupam … YouCompleteMe third_party ycmd ae8a33f8 … 5 echo $?
139
答え1
GNUを使用してfind
ファイル名がパターンと一致する一般ファイルのサイズ(バイト単位)を取得するには、.ycm*
次のようにします。
find . -type f -name '.ycm*' -printf '%s\t%p\n'
その後、サイズが印刷され、その後にタブ文字とファイルのパス名が表示されます。コマンドラインでシェルグローブパターンとして使用したくない場合は、ファイル名パターンの引用に注意してください。
以下は、stat
同様の方法で各ファイルに対して外部コマンドを使用します(Linuxのみ)。
find . -type f -name '.ycm*' -exec stat --printf '%s\t%n\n' {} +
以下はBSDシステム(macOSなど)に適用されます。
find . -type f -name '.ycm*' -exec stat -f '%z%t%N' {} +
BSDstat
形式の文字列は、%z
バイト単位のサイズに置き換えられ、%t
タブ文字に置き換えられ、%N
ファイルのパス名に置き換えられます。
また見なさい:
stat(1)
システムの手動()ですman 1 stat
。- 「find」の-execオプションについて