检查UNIX目录中是否存在两个文件

时间:2015-02-18 09:45:40

标签: linux unix ksh

早上好,

我正在尝试编写一个korn shell脚本来查看包含大量文件的目录,并检查每个文件是否也与.orig一起存在。

例如,如果目录中的文件名为“mercury_1”,那么还必须有一个名为“mercury_1.orig”的文件

如果没有,则需要将mercury_1文件移动到其他位置。但是,如果.orig文件存在,则不执行任何操作并移至下一个文件。

我确信这很简单,但我在编写Linux脚本方面没有经验,非常感谢帮助!!

3 个答案:

答案 0 :(得分:1)

这是一个小的 ksh 代码段,用于检查当前目录中是否存在文件

fname=mercury_1
if [ -f $fname ]
then
  echo "file exists"
else
  echo "file doesn't exit"
fi

编辑:

执行上述功能的更新脚本<​​/ p>

#/usr/bin/ksh
if [ ! $# -eq 1 ]
then
    echo "provide dir"
    exit  
fi

dir=$1

cd $dir

#process file names not ending with orig
for fname in `ls | grep -v ".orig$"`
do
  echo processing file $fname
  if [ -d $fname ]  #skip directory
  then
    continue
  fi

  if [ -f "$fname.orig" ] #if equiv. orig file present 
  then
    echo "file exist"
    continue
  else
    echo "moving"       
    mv $fname /tmp
  fi

 done

希望有所帮助!

答案 1 :(得分:0)

您可以使用以下脚本

script.sh:

#!/bin/sh

if [ ! $# -eq 2 ]; then
    echo "error";
    exit;
fi

for File in $1/*
do
    Tfile=${File%%.*}
    if [ ! -f $Tfile.orig ]; then
        echo "$File"
        mv $File $2/
    fi
done

用法:

./script.sh <search directory>  <destination dir if file not present>

这里,对于每个带有扩展名的文件,检查是否存在“* .orig”,如果没有,则将文件移动到不同的目录,否则什么都不做。

扩展已被删除,因为您不想对 *.orig 文件重复相同的步骤。

答案 2 :(得分:0)

我在OSX上测试了这个(基本上mv应该与linux不同)。我的测试目录是zbar,目标是/ tmp目录

 #!/bin/bash
 FILES=zbar
 cd $FILES
 array=$(ls -p |grep -v "/")  # we search for file without extension so put them in array and ignore directory
 echo $array
 for f in $array #loop in array and find .orig file 
 do
 #echo $f
 if [ -e "$f.orig" ]
   then
   echo "found $f.orig"
 else
     mv -f "$f" "/tmp"
   fi
 done