我怎样才能修改我的脚本,使其以表格形式打印输出,就像这张截图一样?
ruta=$1
nom=$2
size=$3
mod=$4
search="$(find "$ruta" -iname "*$nom*" -size $size -mtime $mod)"
fichero="$(ls -lh $search | awk 'BEGIN{FS="/"; OFS="\t"}{print$NF}')"
mida="$(ls -lh $search | awk '{print$5}')"
modificado="$(ls -l --full-time $search | awk '{print$6}')"
path="$(ls -d $search | awk 'BEGIN{FS="/"; OFS="/"} {$NF=""; print$0,$NF}')"
#echo $search
echo -e "\e[31mNOMBRE DEL FICHERO\n\e[0m$fichero"
echo
echo -e "\e[31mTAMAÑO\n\e[0m$mida"
echo
echo -e "$modificado"
echo
echo -e "$path"
echo
你可以从不同的输入子命令中接收信息包,如 search
, fichero
等。这意味着更好的名字是 searches
, ficheros
等。
如果你把这些分配给bash数组,你可以在之后像这样循环。
# read shell command into array ()
result=($(find /var/log -type f))
# show found number of elements
echo "Elements found: ${#result[@]}"
# loop elements by counter
for ((i=0; i<${#result[@]}; i++))
do
echo ${result[$i]}
done
echo "-----"
# print all content
echo ${result[@]}
关于使用bash数组的有趣文章: https:/www.thegeekstuff.com201006bash-array-tutorial
ruta=$1
nom=$2
size=$3
mod=$4
search=($(find "$ruta" -not -type d -iname "*$nom*" -size $size -mtime $mod))
echo -e "FICHERO\tTAMANO\tMODIFICATION\tRUTA"
for ((i=0; i<${#search[@]}; i++))
do
fichero=$(basename ${search[$i]})
mida=$(stat -f "%z" ${search[$i]})
modificado=$(stat -t "%Y-%m-%d" -f "%Sm" ${search[$i]})
path=$(dirname ${search[$i]})
echo -e "$fichero\c"
echo -e "\t$mida\c"
echo -e "\t$modificado\c"
echo -e "\t$path\c"
echo
done
还有一个简化的变体,有printf输出,还有一个无数组的for循环。
ruta=$1
nom=$2
size=$3
mod=$4
search=$(find "$ruta" -not -type d -iname "*$nom*" -size $size -mtime $mod 2>/dev/null)
printf "%s %38s %12s %s\n" "FICHERO" "TAMANO" "MODIFICATION" "RUTA"
printf "%s\n" "--------------------------------------------------------------------"
for file in ${search}
do
fichero=$(basename $file)
mida=$(stat -f "%z" $file)
modificado=$(stat -t "%Y-%m-%d" -f "%Sm" $file)
path=$(dirname $file)
printf "%35s %10s %12s %s\n" $fichero $mida $modificado $path
done