Bash 提取有关以下内容的信息:尺寸和尺寸&;《时代》杂志&;单行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

大家好!我对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 -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