2013-12-12 53 views
1

的任務是,要列出從目錄,包含相同字母的所有文件名稱,唯一的區別是字母 像asd.txtdsa.txt順序shell腳本:文件名以相同的字母

有一個在PowerShell中工作代碼:

for i in `ls -v $dir`; 
do 
temp=$(grep -o . <<<"$i"|sort|tr -d "\n") 
temper=$i 
for j in `ls -v $dir`; 
do 
    temp2=$(grep -o . <<<"$j"|sort|tr -d "\n") 
    if [ "$temp" = "$temp2" ] && [ "$temper" != "$j" ]; 
    then 
     echo $temper 
     echo $j 
    fi 
done; 
done; 

這是一個幾乎工作的代碼,問題是,清單正確的文件2倍,任何想法糾正它嗎?

回答

2

慶典

這將爲文件打破名稱中帶有空格:

getchars() { echo "$1" | sed 's/./&\n/g' | sort | tr -d '\n'; } 
declare -A files 
for file in *; do files["$(getchars $file)"]+="$file "; done 

測試與文件asdf.txtfdsa.txtfoofoobar目錄,tadxfst.

for key in "${!files[@]}"; do printf "%s\t%s\n" "$key" "${files[$key]}"; done 
foo foo 
.adfsttx asdf.txt fdsa.txt tadxfst. 
abfoor foobar 

,取決於您所使用的團體做什麼,我會使用類似的Perl:

perl -e ' 
    opendir $dir, "."; 
    while (readdir $dir) { 
     next if /^\.\.?$/; 
     push @{$files{join "", sort split //}}, $_; 
    } 
    # now do something with the files 
    use Data::Dumper; 
    print Dumper \%files 
' 
$VAR1 = { 
      '.adfsttx' => [ 
          'asdf.txt', 
          'fdsa.txt', 
          'tadxfst.' 
         ], 
      'foo' => [ 
        'foo' 
        ], 
      'abfoor' => [ 
         'foobar' 
         ] 
     }; 
相關問題