我想从目录中删除一些重复的文件。
在我$PATH
的目录中,我编写了一个包含以下内容的脚本remove_duplicates
:
$:~/local/bin cat remove_duplicates
#!/bin/bash
remove_duplicates() {
for i in *
do
# echo ${i}
if [ -e ${i}.~1~ ]
then
hash1=$(md5sum ${i} | awk '{print $1}')
hash2=$(md5sum ${i}.~1~ | awk '{print $1}')
if [ "$hash1" = "$hash2" ]
then
rm -v ${i}.~1~
fi
fi
done
}
当我在包含重复文件的目录中执行脚本时,它不会删除副本。
$:~/.vim/colors md5sum candycode*
8b115e7b2ed03eb949c9c0b2cf049012 candycode.vim
8b115e7b2ed03eb949c9c0b2cf049012 candycode.vim.~1~
$:~/.vim/colors which remove_duplicates
~/local/bin/remove_duplicates
$:~/.vim/colors remove_duplicates
$:~/.vim/colors md5sum candycode*
8b115e7b2ed03eb949c9c0b2cf049012 candycode.vim
8b115e7b2ed03eb949c9c0b2cf049012 candycode.vim.~1~
我认为问题可能出在我*
循环中for
的扩展中,但我不确定如何正确扩展(即展开以包含所有文件)在调用脚本的目录中。)
我认为问题出在哪里的原因是当我取消注释脚本中的echo ${i}
行时,我看不到任何与stdout
相呼应的内容。
我还尝试将*
替换为$PWD/*
,但这似乎没有做任何事情。
答案 0 :(得分:2)
您正在定义一个功能,但没有运行它。
也就是说,当你运行这个脚本时,它会逐行执行并执行它。这样做的目的是定义一个名为remove_duplicates
的函数..然后它到达文件的末尾并完成。
您可以在最后调用remove_duplicates
添加一行,或者您可以删除首先使其成为函数的声明:
#!/bin/bash
for i in *
do
# echo "${i}"
if [ -e "${i}.~1~" ]
then
hash1=$(md5sum "${i}" | awk '{print $1}')
hash2=$(md5sum "${i}.~1~" | awk '{print $1}')
if [ "$hash1" = "$hash2" ]
then
rm -v "${i}.~1~"
fi
fi
done