我想搜索目录中具有特定名称的所有文件并对其应用 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'
这将打印大小,后跟制表符和文件的路径名。请注意文件名模式的引用,以避免将其用作命令行上的 shell 通配模式。
以下将以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 选项