Bash脚本不会创建文件夹并尝试自行移动它

时间:2015-04-08 13:01:34

标签: bash

我正在编写一个bash脚本,该脚本应该按照部分名称将照片分类到文件夹。 这个问题给了我很多错误,我找不到错误。即使是ShellCheck也没有找到任何东西。如果你们这些人可以帮助我,那就太好了。

我的剧本:

#!/bin/bash

Total=$(ls -1 | wc -l)
echo "$Total"
Count=1

while [[ $Count < $Total ]]
do
    NameOut=$(ls -1 | grep -o '[^-]*,[^-]*' | sed -n "$Count"p)
    echo "$NameOut"
    Filename=$(ls -1 | sed -n "$Count"p)
    echo "$Filename"
    if [ -d "$NameOut" ]; then
        mv "$Filename" "$NameOut"/
        Count=$((Count + 1))
    else
        mkdir "$NameOut"
        mv "$Filename" "$NameOut"/
        Count=$((Count + 1))
    fi
done

该脚本由于某种原因尝试移动脚本本身并且它不会创建文件夹 - 并且无法移动文件,因为没有文件夹可以移动它们。 它自己包含的目录如下所示:

ls -1

REZ-Name,Surname-02-12-1996.jpg
BLEACH-Name,Surname-04-08-2008.jpg

1 个答案:

答案 0 :(得分:1)

shellcheck确实识别了这个脚本的几个问题。

这个脚本也非常低效,因为当它不需要这样做时,它会反复循环遍历文件的内容。

一系列文件名将是更多更好的方式来执行此任务。

话虽如此,这与你列出的错误没有任何关系。

您的脚本问题是print行。

你期待他们做什么?

echo行已经打印出您的变量值。你的意思是printf '%s\n' "$var"吗? (这只会复制echo行输出?)

print完全是一个不同的命令,并试图弄清楚如何打印你给它的参数(如打印机等)。


未经测试但是这样的事情可能会做你想要的。 grep的剩余使用几乎可以肯定地被替换,但是没有看到代表性的输入和输出,这不太可能偏离初衷。

#!/bin/bash

files=(*)
total=${#files[@]}
echo "$total"

count=1
while (( count < total )); do
    filename=${files[count - 1]}
    echo "$filename"
    nameout=$(echo "$filename" | grep -o '[^ ]*,[^ ]*')
    mkdir -p "$nameout"
    mv "$filename" "$nameout/"
    count=$((count + 1))
done