Linux 将文件名和大小放入数组中
我试图将文件名和大小放入数组中,以便在for语句中进行比较: 我有以下代码:Linux 将文件名和大小放入数组中,linux,bash,shell,Linux,Bash,Shell,我试图将文件名和大小放入数组中,以便在for语句中进行比较: 我有以下代码: list=( $( ls -al *.gz |awk '{print $9, $5}' |grep 2014-08-12 ) ) for line in ${list[@]} do echo "0="${line[0]} echo "1="${line[1]} done 但结果是: 0=2014-08-12.tar.gz 1= 0=50265 1= 0=2014-08-12.tar.gz 1= 0
list=( $( ls -al *.gz |awk '{print $9, $5}' |grep 2014-08-12 ) )
for line in ${list[@]}
do
echo "0="${line[0]}
echo "1="${line[1]}
done
但结果是:
0=2014-08-12.tar.gz
1=
0=50265
1=
0=2014-08-12.tar.gz
1=
0=693766
1=
结果应该是:
0=2014-08-12.tar.gz
1=50265
0=2014-08-12.tar.gz
1=693766
我做错了什么???您必须避免解析
ls
输出。要存储文件大小和文件名,请使用stat
命令:
sizes=()
names=()
for i in *.gz; do
sizes+=( $(stat -c "%s" "$i") )
names+=( "$(stat -c "%n" "$i")" )
done
必须避免解析
ls
输出。要存储文件大小和文件名,请使用stat
命令:
sizes=()
names=()
for i in *.gz; do
sizes+=( $(stat -c "%s" "$i") )
names+=( "$(stat -c "%n" "$i")" )
done
使用
stat
和read
循环:
while read -r size file; do
echo -e "0=$file\n1=$size"
done < <(stat -c "%s %n" *.gz)
读取-r大小文件时;做
echo-e“0=$file\n1=$size”
使用stat
和read
循环完成:
while read -r size file; do
echo -e "0=$file\n1=$size"
done < <(stat -c "%s %n" *.gz)
读取-r大小文件时;做
echo-e“0=$file\n1=$size”
完成<迭代线性列表的一种正确方法是
for (( i = 0; i < ${#list[@]}; i += 2 )); do
echo "0=${line[i]}"
echo "1=${line[i + 1]}"
done
for((i=0;i<${#list[@]};i+=2));做
回显“0=${line[i]}”
echo“1=${line[i+1]}”
完成
或者干脆
for (( i = 0; i < ${#list[@]}; i += 2 )); do
printf '0=%s\n1=%s\n' "${line[i]}" "${line[i + 1]}"
done
for((i=0;i<${#list[@]};i+=2));做
printf'0=%s\n1=%s\n'${line[i]}”“${line[i+1]}”
完成
迭代线性列表的一种正确方法是
for (( i = 0; i < ${#list[@]}; i += 2 )); do
echo "0=${line[i]}"
echo "1=${line[i + 1]}"
done
for((i=0;i<${#list[@]};i+=2));做
回显“0=${line[i]}”
echo“1=${line[i+1]}”
完成
或者干脆
for (( i = 0; i < ${#list[@]}; i += 2 )); do
printf '0=%s\n1=%s\n' "${line[i]}" "${line[i + 1]}"
done
for((i=0;i<${#list[@]};i+=2));做
printf'0=%s\n1=%s\n'${line[i]}”“${line[i+1]}”
完成
+1。如果文件名包含空格,则应使用stat-c“%s%n”
并首先读取大小。+1。如果文件名包含空格,则应使用stat-c“%s%n”
并首先读取大小。