shell 中如何用for语句同时搜索两个文件夹内的所有文件,并进行文件比较,急用,希望高手解答,谢谢

作者&投稿:计仁 (若有异议请与网页底部的电邮联系)
在windows中用shell遍历一个文件夹下得所有文件并对文件执行同一个指令~

你的for循环中循环的是$PATH ,他只是代表这个路径,并不表示里面的文件名。

事先建立一个文件夹tempfolder,每一个文件与其他所有文件比较后mv到tempfolder,剩下的文件再与其他文件比较。“两个文件某个内容相同”???????
一行格式的命令:

for i in * ;do for j in * ;do if [ -f "$i" ] && [ -f "$j" ] && [ "$i" != "$j" ]; then echo "$i"," ","$j" ;F1=$(grep 内容 “$i”);F2=$(grep 内容 “$j”) ; if [ "$F1" != "" ] && [ "$F2" != "" ] ;then rm "$i" "$j" ;fi ;fi ;done ;if [ -f "$i" ] ;then mv "$i" ./tempfolder;fi; done

多行格式命令:

for i in * ;do
for j in * ;do
if [ -f "$i" ] && [ -f "$j" ] && [ "$i" != "$j" ]; then
echo "$i"," ","$j" #测试语句
F1=$(grep 内容 “$i”)
F2=$(grep 内容 “$j”)
if [ "$F1" != "" ] && [ "$F2" != "" ] ;then
rm "$i" "$j"
fi
fi
done
if [ -f "$i" ] ;then
mv "$i" ./tempfolder
fi
done

不考虑子文件夹。

先用ls命令枚举其中一个文件夹内的所有文件(用数组记录文件名)。
cd 目录1
declare -a array=(`ls`)

然后在枚举另一个文件夹时用for循环与数组元素逐个比较。
cd 目录2
for file2 in *
do
isFound=0
for file1 in ${array[*]}
do
if [ "$file2" = "$file1" ]; then
diff -y --suppress-common-lines 目录1/$file1 目录2/$file2
isFound=1
fi
done
[ $isFound -eq 0 ] && echo "目录2下的$file2文件在目录1下不存在!"
done

当然,还有一种情况我没有处理,即目录1下的内容在目录2中不存在。

for /f %%i (文件夹1) do (
for /f %%j (文件夹2) do (
findstr /ivg:%%i %%j >output.txt
)
)

不好意思上面是bat的。。
dir1=`ls -l 文件夹1|grep "^-"|awk '{print $1}'`
for file1 in $dir1
do
dir2=`ls -l 文件夹2|grep "^-"|awk '{print $1}'`
for file2 in dir2
do
diff $file1 $file2 >output.log
done
done

代码中采用两个for循环就可以了。


曲江区17083888191: shell 中如何用for语句同时搜索两个文件夹内的所有文件,并进行文件比较,急用,希望高手解答,谢谢 -
书吴沉香: 不考虑子文件夹.先用ls命令枚举其中一个文件夹内的所有文件(用数组记录文件名).cd 目录1 declare -a array=(`ls`) 然后在枚举另一个文件夹时用for循环与数组元素逐个比较.cd 目录2 for file2 in * do isFound=0 for file1 in ${array[*]} do if [ "$...

曲江区17083888191: 如何在python 的shell里运行for循环并且执行? -
书吴沉香: 就拿你这题来说吧,trainMat......这行和上行for循环空两个,而不是对齐,for循环体都是这样的,如果你用python集成开发环境(如Pycharm)是帮你自动对齐的,你按照这么写,直到for循环写完,然后按两次回车Enter,就可以执行for循环了.

曲江区17083888191: 求编写linux shell 程序求和使用for语句创建一个shell程序,其功能是1+2+3+…+n.请高手们帮下忙!要可... -
书吴沉香: #!/bin/bash echo "Input n:" read n s=0 for (( i=0;i<n+1;i=i+1 )) do let s=$s+$i done echo "1+2+...+n = $s(n=$n)"

曲江区17083888191: for循环在shell中并不像c语言累加的形式,那具体怎么实现 -
书吴沉香: 1、shell中for也可以像c语言使用,例如 sum=0; for ((i=0;ido((sum=sum+i)); done2、shell中for也有其他的用法 for i in $(seq 1 10) do echo $i done3、for file in `ls /opt` do echo $file done4、for id in `cat a.txt` do echo $id done

曲江区17083888191: shell中for循环嵌套应该怎么写 -
书吴沉香: for num in "1 2 3 4 5" 改为 for num in 1 2 3 4 5写在双引号中就表示是一个整体,就只有一次循环.

曲江区17083888191: 使用for语句创建一个shell程序,其功能为1+2+...+n -
书吴沉香: classic shell scripting stylex=0 for i in 1 2 3 4 5 6 7 8 9 10dox=`expr $i + $x`doneecho $xwith bashx=0 for i in {1..10}dox=$((i + x))doneecho $x------修改答案------------------楼下提示,我误会了问题,呵呵,最快是这样with bash#! /bin/...

曲江区17083888191: Linux中用shell编程时用for语句实现 输入两个生日并计算两个生日相差几天 -
书吴沉香: 1、用for循环计算什么? 2、用unix时间戳计算即可,例如 #!/bin/sh #date.sh beg_date=`date -d "$1" +%s` end_date=`date -d "$2" +%s` if [[ -z $1 ]]||[[ -z $2 ]];then echo "Usage: $0 YYYYMMDD YYYYMMDD" exit 0; fi if [[ ${beg_date} > ${...

曲江区17083888191: shell里的for循环怎么写 -
书吴沉香: for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止. 其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符...

曲江区17083888191: shell脚本如何用for循环做递减 -
书吴沉香: 用seq命令可以生成递减序列:1234 fori in$(seq10 -1 1 ) do echo$i done seq命令说明:基本用法 seq [选项]... 尾数 seq [选项]... 首数 尾数 seq [选项]... 首数 增量 尾数 以指定增量从首数开始打印数字到尾数. 对于第三种模式,当首数大于尾数时,增量需要指定为负数.

曲江区17083888191: 用shell的for语句结构和while语句结构编写程序 -
书吴沉香: 1、以下是shell脚本代码:#!/bin/bashfor ((j=1;j<10;j++))do for ((i=1;i<j;i++)) do echo -en "\t" done for ((k=j;k<10;k++)) do echo -en "$((k*j))\t" done echo ""done2、执行结果见下图

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网