从源文件夹读取的文件未被识别为文件或目录

Files read from source folder not being recognized as files or directories

这是我的代码:

#!/bin/bash

if [ $# -ne 2 ]
then
    echo "USAGE: `basename [=10=]` ./dir_from ./dir_to"
    exit -1
fi

source=
destination=

if [ ! -d $source ]
then
    echo "ERROR: Source directory doesn't exist."
    exit -1
fi

if [ ! -d $destination ]
then
    mkdir $destination
fi

allFiles=`ls $source`
total=0

for file in $allFiles
do
    echo $file
    fileName="${file%%.*}"
    extension="${file##*.}"
    size=`ls -l $file | awk '{print }'`
    echo $size

    if [ -f $file ] && [ "$extension" == "txt" ] && [[ "$fileName" =~ "^[a-z]*$" ]]
    then
        mv "${source}/${file}" "${destination}/${file}.moved_txt"
    fi
done

以下是 source 文件夹的内容:

total 8
-rw-r--r-- 1 191128 domain users 32 May 22 15:01 afile.txt
-rw-r--r-- 1 191128 domain users  0 May 22 15:01 pleaseeeee.txt
-rw-r--r-- 1 191128 domain users 17 May 22 15:01 pls.txt

我面临的问题是测试一个文件是否真的是一个文件,[ -f $file ] 不起作用。它说它们不是文件。

除了那个条件以外的一切都有效。是的,正确的文件夹在 source 变量中,是的,for 循环从文件夹中吐出所有文件。

如果我尝试测试 -d 以查看它们是否是目录,那也会失败。只有在我否定-f的时候才出现,真是奇怪。

它们显然是文件(由 - 表示)。我使用命令 touch 创建它们,我也尝试使用命令 nano 创建它们并输入一些内容。我还尝试从主目录创建文件并将它们移动到我的源文件夹 from 以查看这是否会改变任何东西,但它没有。现在这里有一些有趣的事情:如果文件与脚本位于同一目录中,它就可以工作(它们被识别为文件)。

欢迎任何想法和评论。

我正在回答我自己的问题,因为我发现了我的错误。我不知道在堆栈溢出时是否允许这样做,但如果其他人面临同样的错误,如果这个问题留在这里,我将不胜感激。

在我的变量 allFiles 中,我只有文件名。我需要连接文件的实际路径。

if [ -f "$source/$file" ]