从源文件夹读取的文件未被识别为文件或目录
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" ]
这是我的代码:
#!/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" ]