ディレクトリから重複したファイルを削除したいと思います。私$PATH
内のディレクトリで は、私は次を含むスクリプトremove_duplicates
を書いた:関数を含むbashスクリプトは何も実行しません
$:~/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
}
私は重複したファイルを含むディレクトリでスクリプトを実行すると、それは重複を削除しません。
からディレクトリ内のすべてのファイルが含まれるように拡大、すなわち(私は問題が私のfor
ループで
*
の拡大にあるかもしれないと思うが、私はそれが正常に拡大するために取得するかどうかはわかりません
$:~/.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~
スクリプトが呼び出されます)。
私はこれが問題のどこにあるのかと考えている理由は、スクリプトのecho ${i}
行のコメントを外すと、stdout
に何も表示されないことがわかります。
*
を$PWD/*
に置き換えようとしましたが、これは何もしないようです。
あなたは、関数の呼び出しを追加するつもりでした? –
私は、bash関数がどのように機能するかについて深刻な誤解を抱いていたと思います。関数を呼び出すために、ファイルに別の行を追加しました。これで、期待どおりに動作します。ありがとう! – kevin
@DrorMoyal、eh? '[" $ foo "=" $ bar "]'は完全に正しいです。それは間違っています(POSIX shで)。 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html –