【问题标题】:Increment Number in ZSH scriptZSH 脚本中的递增数
【发布时间】:2021-12-23 14:30:36
【问题描述】:

我正在尝试根据目录中的文件数量创建目录,我的方法是循环。

我通过一个数字变量来跟踪数字,并希望在每个偶数之后增加它,创建一个目录。

这是我目前的代码:

#!/bin/zsh

LOOP=$(ls 2021/*.xlsx)
totalFiles=$(ls 2021/*.xlsx | wc -l)
directoryCount=0
count=0

for FILE in ${LOOP[@]}; do
    echo "BEFORE: $count"
    count=$((count+1))
    echo "AFTER: $count"
    echo $FILE
done

echo "TOTAL FILE: $totalFiles"
echo $count

我得到的输出是:

BEFORE: 0
AFTER: 1
2021/*Tanner2103.xlsx
2021/*Tanner2104.xlsx
2021/*Tanner2105.xlsx
2021/*Tanner2106.xlsx
TOTAL FILE:       4
1

我不明白为什么 count 只增加一次,但循环显然有更多的迭代次数。

所以基本上因为有 4 个文件,我想将它们分成 2 个目录,我稍后再做逻辑。但现在我只是想让目录代码正常工作。

【问题讨论】:

  • 您将变量LOOP 定义为标量,但之后将其作为数组访问。
  • 不要使用lsLOOP=( 2021/*.xlsx ) 就足够了并且适用于所有有效的文件名。

标签: bash shell zsh oh-my-zsh


【解决方案1】:

好吧,我觉得很傻。我认为ls 会作为一个迭代返回,但它实际上只返回一个迭代作为一个整体。

这是我更新的代码,它会按我的意愿更新。

totalFiles=$(ls 2021/*.xlsx | wc -l)

count=0

for FILE in 2021/**/*(.); do
    echo "BEFORE $count"
    echo "$FILE"
    ((count++))
    echo "AFTER $count"
done

echo "TOTAL FILE: $totalFiles"
echo $count


result: 
BEFORE 0
2021/*Tanner2103.xlsx
AFTER 1
BEFORE 1
2021/*Tanner2104.xlsx
AFTER 2
BEFORE 2
2021/*Tanner2105.xlsx
AFTER 3
BEFORE 3
2021/*Tanner2106.xlsx
AFTER 4
TOTAL FILE:       4
4

【讨论】:

  • 不要使用ls。如果要匹配文件的数量,files=(2021/*.xlsx)totalFiles=${#files}
  • ls 输出单个字符串,其中可能嵌入了换行符来分隔单个文件名。但是这些名称可能包含换行符,因此您无法分辨哪些换行符是文件名的一部分,哪些是单独的文件名。
  • 我会记下列出所有文件的命令的简写,并感谢您提供的信息。 ZSH/Bash 是我想了解更多的东西
猜你喜欢
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2011-04-15
  • 2017-03-27
  • 2021-11-07
  • 1970-01-01
  • 2017-06-01
相关资源
最近更新 更多