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

Check that two file exists in UNIX Directory

早上好,

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

例如,如果目录中的文件名为 'mercury_1',则还必须有一个名为 'mercury_1.orig'

的文件

如果没有,需要将mercury_1文件移动到其他位置。但是,如果 .orig 文件存在,则什么都不做并移至下一个文件。

我相信这真的很简单,但我在编写 Linux 脚本方面经验不足,将不胜感激!!

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

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

编辑:

执行上述功能的更新脚本

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

dir=

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

希望对您有所帮助!

您可以使用下面的脚本

script.sh :

#!/bin/sh

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

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

用法:

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

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

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

我在 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