Bash 提取有关以下内容的信息:尺寸和尺寸&;《时代》杂志&;单行shell脚本中的行计数
大家好!我对shell脚本非常陌生,我被卡住了 我需要提取有关以下内容的信息:文件名、大小、时间和行数,我希望它在一个命令行中完成。我试着这样做:Bash 提取有关以下内容的信息:尺寸和尺寸&;《时代》杂志&;单行shell脚本中的行计数,bash,Bash,大家好!我对shell脚本非常陌生,我被卡住了 我需要提取有关以下内容的信息:文件名、大小、时间和行数,我希望它在一个命令行中完成。我试着这样做: ls -l * && wc -l file.txt && du -ks file.txt | cut -f1| awk '{print $5" " $6 " " $7 " "$8 " " $9 " "$1 " "$2}' 但它不能正常工作 我也试过在循环中做,但我不知道如何从循环中提取 for file in `ls
ls -l * && wc -l file.txt && du -ks file.txt | cut -f1| awk '{print $5" " $6 " " $7 " "$8 " " $9 " "$1 " "$2}'
但它不能正常工作
我也试过在循环中做,但我不知道如何从循环中提取
for file in `ls -ltr /export/home/oracle/dbascripts/scripts`
do
[[ -f $file ]] && echo $file | awk '{print $3}'
done
然后我想重定向到像这样的文件>>,用于sql加载器。
提前谢谢 如果您有GNU find和GNU coreutils,这可能是一个开始(大多数Linux发行版都可以): 您将希望看到手册页面,以便GNU更好地理解这一点 编辑: 至少还有其他更快的方法,使用和bash进程替换,但这有点难看,而且更难保证安全并解决问题。
ExtractInformation()
ExtractInformation()
{
timesep="-"
sep="|"
dot=":"
sec="00"
lcount=`wc -l < $fname`
modf_time=`ls -l $fname`
f_size=`echo $modf_time | awk '{print $5}'`
time_month=`echo $modf_time | awk '{print $6}'`
time_day=`echo $modf_time | awk '{print $7}'`
time_hrmin=`echo $modf_time | awk '{print $8}'`
time_hr=`echo $time_hrmin | cut -d ':' -f1`
time_min=`echo $time_hrmin | cut -d ':' -f2`
time_year=`date '+%Y'`
time_param="DD-MON-YYYY HH24:MI:SS"
time_date=$time_day$timesep$time_month$timesep$time_year" "$time_hrmin$dot$sec
result=$fname$sep$time_date$sep$f_size$sep$lcount$sep$time_param
sqlresult=`echo $result | awk '{FS = "|" ;q=sprintf("%c", 39); print "INSERT INTO SIP_ICMS_FILE_T(f_name, f_date_time,f_size,f_row_count) VALUES (" q $1 q ", TO_DATE("q $2 q,q $5 q "),"$3","$4");";}'`
echo $sqlresult>>data.sql
echo "Reading data....."
}
UploadData()
{
#ss=`sqlplus -s a/a@adb @data.sql
#set serveroutput on
#set feedback off
#set echo off`
echo "loading with sql Loader....."
}
f_data=data.sql
[[ -f $f_data ]] && rm data.sql
for fname in * ;
do
if [[ -f $fname ]] then
ExtractInformation
fi
UploadData
#Zipdata
done
{
timesep=“-”
sep=“|”
dot=“:”
sec=“00”
lcount=`wc-l<$fname`
modf_time=`ls-l$fname`
f_size=`echo$modf_time | awk'{print$5}'`
time_month=`echo$modf_time | awk'{print$6}'`
time_day=`echo$modf_time | awk'{print$7}'`
time_hrmin=`echo$modf_time | awk'{print$8}'`
time_hr=`echo$time_hrmin | cut-d':'-f1`
time_min=`echo$time_hrmin | cut-d':'-f2`
时间\年份=`date'+%Y'`
time_param=“DD-MON-yyyyy HH24:MI:SS”
时间\日期=$time\日$timesep$时间\月$timesep$时间\年“$time\ hrmin$点$秒
结果=$fname$sep$时间\日期$sep$f\大小$sep$L计数$sep$时间\参数
sqlresult=`echo$result | awk'{FS=“|”;q=sprintf(“%c”,39);打印“插入到SIP_ICMS_文件中”(f_名称、f_日期、f_时间、f_大小、f_行数)值(“q$1q”、截止日期(“q$2q,q$5q”),“$3”,“$4”);}`
echo$sqlresult>>data.sql
echo“读取数据…”
}
上传数据()
{
#ss=`sqlplus-sa/a@adb@data.sql
#将服务器输出设置为on
#引发反馈
#激起回声`
echo“使用sql加载程序加载…”
}
f_data=data.sql
[[-f$f_data]]和&rm data.sql
对于fname in*;
做
如果[[-f$fname]],则
提取信息
fi
上传数据
#Zipdata
完成
什么操作系统?Linux、BSD、Solaris、HP-UX?不是BSD,HP-UX=>它的SunOSIt在ubuntu中工作,但在SunOS 5.0中没有此命令的问题-printf“%p%TY-%Tm-%Td%TH:%Tm:%TS%s”;也许在找到信息后,没有其他方法可以提取信息file@Alper:SunOS中的find命令(特别是像5.0-AFAIK这样的旧版本,这个版本的寿命在新千年之前就结束了)与GNU find相比非常简单。我认为stat命令也不见了,它在这里可能会有所帮助。与它们的BSD/GNU版本相比,其他命令也必然会被削弱。目前,除了解析ls,我想不出任何替代方法(恶心)。如果您需要这方面的帮助,您应该编辑您的问题,并在系统中添加ls-l
输出的示例。大多数人都这样做了,但看起来不太酷,也许您会建议改进方法
for i in *; do
if [[ -d "$i" ]]; then
continue
fi
find "$i" -printf '%p %TY-%Tm-%Td %TH:%TM:%TS %s '
wc -l <"$i"
done
ExtractInformation()
{
timesep="-"
sep="|"
dot=":"
sec="00"
lcount=`wc -l < $fname`
modf_time=`ls -l $fname`
f_size=`echo $modf_time | awk '{print $5}'`
time_month=`echo $modf_time | awk '{print $6}'`
time_day=`echo $modf_time | awk '{print $7}'`
time_hrmin=`echo $modf_time | awk '{print $8}'`
time_hr=`echo $time_hrmin | cut -d ':' -f1`
time_min=`echo $time_hrmin | cut -d ':' -f2`
time_year=`date '+%Y'`
time_param="DD-MON-YYYY HH24:MI:SS"
time_date=$time_day$timesep$time_month$timesep$time_year" "$time_hrmin$dot$sec
result=$fname$sep$time_date$sep$f_size$sep$lcount$sep$time_param
sqlresult=`echo $result | awk '{FS = "|" ;q=sprintf("%c", 39); print "INSERT INTO SIP_ICMS_FILE_T(f_name, f_date_time,f_size,f_row_count) VALUES (" q $1 q ", TO_DATE("q $2 q,q $5 q "),"$3","$4");";}'`
echo $sqlresult>>data.sql
echo "Reading data....."
}
UploadData()
{
#ss=`sqlplus -s a/a@adb @data.sql
#set serveroutput on
#set feedback off
#set echo off`
echo "loading with sql Loader....."
}
f_data=data.sql
[[ -f $f_data ]] && rm data.sql
for fname in * ;
do
if [[ -f $fname ]] then
ExtractInformation
fi
UploadData
#Zipdata
done