Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将文件名和大小放入数组中_Linux_Bash_Shell - Fatal编程技术网

Linux 将文件名和大小放入数组中

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

我试图将文件名和大小放入数组中,以便在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=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”
并首先读取大小。