简单的bash脚本,用于确定文件是否在目录中

时间:2011-11-30 04:28:40

标签: bash directory arguments compare

我试图在bash中弄清楚如何简单地表明作为文件的参数在另一个参数中是一个目录,然后删除该文件。我正在考虑将变量设置为$(dirname $file),然后将其与目录名称进行比较,但我不确定这是否是适合此问题的正确方向。或者我会对目录进行ls并以某种方式将其与文件匹配?

4 个答案:

答案 0 :(得分:3)

您可以使用iftest: -

file="somedir/somefile.txt"
if test -f $file
then
   echo "file exist"
fi

示例: - http://en.wikipedia.org/wiki/Test_(Unix)

答案 1 :(得分:1)

如上所述,这个问题有点含糊不清。对我来说,应该删除哪两个文件并不完全清楚。在进一步思考时,我认为如果文件存在于远程目录中,则应删除指定的文件名。这导致了这个脚本,我相信:

filename="$1"
dirname="$2"
basename=$(basename "$filename")
pathname="$dirname/$filename"
if [ -f "$pathname" ]
then rm -f "$filename"
fi

您可以测试"$dirname"是否为目录;但是,如果它不是目录,那么基于它的路径名将不是文件(因此对它的测试将是失败的),因此除非您需要提供信息性错误报告,否则对该目录的测试是多余的。 / p>

请注意,显示的脚本将在文件或目录名称中出现空白时起作用。错过任何引号,它将无法正常工作。

答案 2 :(得分:0)

查看bash命令test

您可以通过调用命令来使用它:

 test -f "$1"

$1是传递给脚本的第一个参数,或者您可以使用快捷方式:

 [ -f "$1" ]

检查文件是否存在的示例脚本:

 #!/bin/bash
 [ -f "$1" ] && echo "$1 exists" || echo "$1 does not exist"

答案 3 :(得分:0)

你应该照顾真实位置,因为你可以对待符号链接

所以我推荐这个解决方案(readlink查找真实路径)

#!/bin/bash

file="$(readlink -f $1)"   # file is the first argument of teh script
dir="$(readlink -f $2)"    # dir is the secong argument of the script

[[ -e "$dir/$file" ]] && rm -f "$dir/$file" # shortcut to rm the file if the test case is true