首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell-script:具有相同字母的文件名

Shell-script:具有相同字母的文件名
EN

Stack Overflow用户
提问于 2013-12-12 19:41:30
回答 1查看 62关注 0票数 1

任务是,列出包含相同字母的目录中的所有文件名,唯一不同的是字母的顺序,如asd.txtdsa.txt

powershell中有一个工作代码:

代码语言:javascript
复制
 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次,有什么办法纠正它吗?

EN

回答 1

Stack Overflow用户

发布于 2013-12-12 20:49:46

bash

对于名称中有空格的文件,这将中断:

代码语言:javascript
复制
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.txtfoofoobartadxfst.在目录中进行测试

代码语言:javascript
复制
for key in "${!files[@]}"; do printf "%s\t%s\n" "$key" "${files[$key]}"; done
代码语言:javascript
复制
foo foo 
.adfsttx    asdf.txt fdsa.txt tadxfst. 
abfoor  foobar 

根据您对组所做的操作,我将使用类似于perl的内容:

代码语言:javascript
复制
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
'
代码语言:javascript
复制
$VAR1 = {
          '.adfsttx' => [
                          'asdf.txt',
                          'fdsa.txt',
                          'tadxfst.'
                        ],
          'foo' => [
                     'foo'
                   ],
          'abfoor' => [
                        'foobar'
                      ]
        };
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20552699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档