Linux rong>参数1:A(要保存的文件的路径)和参数2:pathB(包含用于查找重复项的子目录的路径),然后此脚本只打印找到的重复项,以便您可以在执行删除之前验证所有内容是否符合要求

Linux rong>参数1:A(要保存的文件的路径)和参数2:pathB(包含用于查找重复项的子目录的路径),然后此脚本只打印找到的重复项,以便您可以在执行删除之前验证所有内容是否符合要求,linux,shell,directory-structure,Linux,Shell,Directory Structure,Linux应用程序fdupes我有责任不告诉您,有一个通用的应用程序fdupes,它的设计就是为了做您想做的事情(更灵活,经过彻底测试) 用法: $ bash fdupes.sh ~/scr/utl ~/scr/rmtmp/ -d deleting: /home/david/scr/rmtmp/bay.sh deleting: /home/david/scr/rmtmp/rsthemes.sh deleting: /home/david/scr/rmtmp/nocomment.sh d

Linux应用程序
fdupes
我有责任不告诉您,有一个通用的应用程序
fdupes
,它的设计就是为了做您想做的事情(更灵活,经过彻底测试)

用法:

$ bash fdupes.sh ~/scr/utl ~/scr/rmtmp/ -d

 deleting: /home/david/scr/rmtmp/bay.sh
 deleting: /home/david/scr/rmtmp/rsthemes.sh
 deleting: /home/david/scr/rmtmp/nocomment.sh
 deleting: /home/david/scr/rmtmp/show-rdtcli.sh
 deleting: /home/david/scr/rmtmp/subdir1/show-rdtcli.sh
脚本需要两个目录作为输入来扫描重复项,它需要第三个参数'-d'来实际删除找到的重复项。示例:

$ bash fdupes.sh ~/scr/utl ~/scr/rmtmp/

  Duplicate found for: bay.sh

/home/david/scr/rmtmp/bay.sh

  Duplicate found for: rsthemes.sh

/home/david/scr/rmtmp/rsthemes.sh

  Duplicate found for: nocomment

/home/david/scr/rmtmp/nocomment.sh

  Duplicate found for: show-rdtcli.sh

/home/david/scr/rmtmp/show-rdtcli.sh
/home/david/scr/rmtmp/subdir1/show-rdtcli.sh
<snip>

试试下面的代码。这将使用西里尔文sum创建一个文件,按cksum值对文件内容进行排序,然后在文件列表上迭代并删除重复的文件

find . -type f -exec cksum {}  \; > cksum.txt
cat cksum.txt |sort -n > filelist

oldSum=""
oldFile=""
while read sum lines filename
do
      echo "oldSum=$oldSum"
      echo "sum=$sum"
      echo "oldFile=$oldFile"
      echo "filename=$filename"
      if [[ "$sum" != "$oldSum" ]] ; then
        oldSum="$sum"
        oldFile=$filename
        echo 
        continue
      fi
      echo "rm -f $filename"
      rm -f $filename
      echo
done < filelist
find-类型f-exec cksum{}\;>cksum.txt
cat cksum.txt | sort-n>文件列表
oldSum=“”
oldFile=“”
读取和行文件名时
做
回显“oldSum=$oldSum”
echo“sum=$sum”
echo“oldFile=$oldFile”
echo“filename=$filename”
如果[“$sum”!=“$oldSum”];然后
oldSum=“$sum”
oldFile=$filename
回音
持续
fi
回显“rm-f$filename”
rm-f$filename
回声
完成<文件列表

尝试下面的代码。这将使用西里尔文sum创建一个文件,按cksum值对文件内容进行排序,然后在文件列表上迭代并删除重复的文件

find . -type f -exec cksum {}  \; > cksum.txt
cat cksum.txt |sort -n > filelist

oldSum=""
oldFile=""
while read sum lines filename
do
      echo "oldSum=$oldSum"
      echo "sum=$sum"
      echo "oldFile=$oldFile"
      echo "filename=$filename"
      if [[ "$sum" != "$oldSum" ]] ; then
        oldSum="$sum"
        oldFile=$filename
        echo 
        continue
      fi
      echo "rm -f $filename"
      rm -f $filename
      echo
done < filelist
find-类型f-exec cksum{}\;>cksum.txt
cat cksum.txt | sort-n>文件列表
oldSum=“”
oldFile=“”
读取和行文件名时
做
回显“oldSum=$oldSum”
echo“sum=$sum”
echo“oldFile=$oldFile”
echo“filename=$filename”
如果[“$sum”!=“$oldSum”];然后
oldSum=“$sum”
oldFile=$filename
回音
持续
fi
回显“rm-f$filename”
rm-f$filename
回声
完成<文件列表

尝试下面的代码。这将使用西里尔文sum创建一个文件,按cksum值对文件内容进行排序,然后在文件列表上迭代并删除重复的文件

find . -type f -exec cksum {}  \; > cksum.txt
cat cksum.txt |sort -n > filelist

oldSum=""
oldFile=""
while read sum lines filename
do
      echo "oldSum=$oldSum"
      echo "sum=$sum"
      echo "oldFile=$oldFile"
      echo "filename=$filename"
      if [[ "$sum" != "$oldSum" ]] ; then
        oldSum="$sum"
        oldFile=$filename
        echo 
        continue
      fi
      echo "rm -f $filename"
      rm -f $filename
      echo
done < filelist
find-类型f-exec cksum{}\;>cksum.txt
cat cksum.txt | sort-n>文件列表
oldSum=“”
oldFile=“”
读取和行文件名时
做
回显“oldSum=$oldSum”
echo“sum=$sum”
echo“oldFile=$oldFile”
echo“filename=$filename”
如果[“$sum”!=“$oldSum”];然后
oldSum=“$sum”
oldFile=$filename
回音
持续
fi
回显“rm-f$filename”
rm-f$filename
回声
完成<文件列表

尝试下面的代码。这将使用西里尔文sum创建一个文件,按cksum值对文件内容进行排序,然后在文件列表上迭代并删除重复的文件

find . -type f -exec cksum {}  \; > cksum.txt
cat cksum.txt |sort -n > filelist

oldSum=""
oldFile=""
while read sum lines filename
do
      echo "oldSum=$oldSum"
      echo "sum=$sum"
      echo "oldFile=$oldFile"
      echo "filename=$filename"
      if [[ "$sum" != "$oldSum" ]] ; then
        oldSum="$sum"
        oldFile=$filename
        echo 
        continue
      fi
      echo "rm -f $filename"
      rm -f $filename
      echo
done < filelist
find-类型f-exec cksum{}\;>cksum.txt
cat cksum.txt | sort-n>文件列表
oldSum=“”
oldFile=“”
读取和行文件名时
做
回显“oldSum=$oldSum”
echo“sum=$sum”
echo“oldFile=$oldFile”
echo“filename=$filename”
如果[“$sum”!=“$oldSum”];然后
oldSum=“$sum”
oldFile=$filename
回音
持续
fi
回显“rm-f$filename”
rm-f$filename
回声
完成<文件列表

A的子目录中的所有文件如何处理?在
A/dir\u A/dir\u 2
等中使用“A/*”作为正则表达式,将返回与模式匹配的所有文件,包括子文件夹。看看:[link]Origin可能是final的子目录之一。我是说。我选择的目录A可能位于我要删除重复项的目录的中间深度。那么
A
子目录中的所有文件呢?在
A/dir\u A/dir\u 2
等中使用“A/*”作为正则表达式,将返回与模式匹配的所有文件,包括子文件夹。看看:[link]Origin可能是final的子目录之一。我是说。我选择的目录A可能位于我要删除重复项的目录的中间深度。那么
A
子目录中的所有文件呢?在
A/dir\u A/dir\u 2
等中使用“A/*”作为正则表达式,将返回与模式匹配的所有文件,包括子文件夹。看看:[link]Origin可能是final的子目录之一。我是说。我选择的目录A可能位于我要删除重复项的目录的中间深度。那么
A
子目录中的所有文件呢?在
A/dir\u A/dir\u 2
等中使用“A/*”作为正则表达式,将返回与模式匹配的所有文件,包括子文件夹。看看:[link]Origin可能是final的子目录之一。我是说。我选择的目录A可能位于我要删除重复项的目录的中间深度。是否只有重复项?没有更改版本?没有旧/新版本?因此,如果在
a
中存在文件,如果在
B/sub1
中找到具有相同名称的文件,则保证文件相同?另外,
A
是否有子目录?具有相同名称的文件将以相同的方式重新排列,而不管它们在目录中的位置如何。A有子目录,A和要从中删除文件的其他目录可以位于相同的深度级别。是否只有重复目录?没有更改版本?没有旧/新版本?因此,如果在
a
中存在文件,如果在
B/sub1
中找到具有相同名称的文件,则保证文件相同?另外,
A
是否有子目录?具有相同名称的文件将以相同的方式重新排列,而不管它们在目录中的位置如何。A有子目录,A和要从中删除文件的其他目录可以位于相同的深度级别。是否只有重复目录?没有更改版本?没有旧/新版本?因此,如果在
a
中存在文件,如果在
B/sub1
中找到同名文件,则
find . -type f -exec cksum {}  \; > cksum.txt
cat cksum.txt |sort -n > filelist

oldSum=""
oldFile=""
while read sum lines filename
do
      echo "oldSum=$oldSum"
      echo "sum=$sum"
      echo "oldFile=$oldFile"
      echo "filename=$filename"
      if [[ "$sum" != "$oldSum" ]] ; then
        oldSum="$sum"
        oldFile=$filename
        echo 
        continue
      fi
      echo "rm -f $filename"
      rm -f $filename
      echo
done < filelist