检查 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
早上好,
我正在尝试编写一个 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