求一段linux shell 的删除文件命令
发布网友
发布时间:2022-04-25 21:12
我来回答
共3个回答
热心网友
时间:2022-06-17 13:43
这个可以这样做,用awk将命令用sprintf组织好再通过system交给shell
cat filenames.txt|awk '{cmd=sprintf("if [ -e %s ];then rm %s;fi",$0,$0);system(cmd)}'
额,这个是文件匹配的删除。
文件匹配的不删除,这个处于安全考虑你要加写*条件,我试着写了个不管那么多的
#!/bin/bash
ls ./forrm/> linshi
cat filenames.txt | awk '{cmd=sprintf("sed -i 's/%s//' linshi",$0);system(cmd)}'
x="`cat linshi`"
cd ./forrm
rm $x
cd ..
rm linshi
总之就是比如是针对./forrm文件夹下的文件,先把列出的文件存在个临时文件里(这里不考虑重名什么的),再通过你的filenames.txt把不删的都去掉。最后剩下的删掉,删掉临时文件
额,看着感觉有点蹩脚,不过可以实现
或者把要删的目录下的东西跟要匹配的文件里的东西分别放在两个数组里面,像这样
#!/bin/bash
if [ $# -ge 2 ];
then
directory=$1
filenames=$2
else
exit;
fi
arr1=("`ls $directory`")
arr2=("`cat $filenames`")
cur="`pwd`"
cd $directory
for i in $arr1
do
for j in $arr2
do
if [ "$j" = "$i" ];then
continue 2;
fi
done
rm $i
done
cd $cur
也可以
热心网友
时间:2022-06-17 13:43
#!/bin/bash
if [ $# -ge 2 ];
then
directory=$1
filenames=$2
fi
list=`ls $directory`
function demo()
{
file=$1
content=`cat $filenames`
for line in $content
do
if [ "$line" == "$file" ];
then
return
fi
done
rm $file
}
for filename in $list
do
cd $directory
if [ -f $filename ];
then
demo $filename
fi
done
热心网友
时间:2022-06-17 13:44
这个很好解决, 就是shell编程的了!
如果想学习更多的shell程序, 就找下me了