任务是,列出包含相同字母的目录中的所有文件名,唯一不同的是字母的顺序,如asd.txt和dsa.txt。
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次,有什么办法纠正它吗?
发布于 2013-12-12 20:49:46
bash
对于名称中有空格的文件,这将中断:
getchars () { echo "$1" | sed 's/./&\n/g' | sort | tr -d '\n'; }
declare -A files
for file in *; do files["$(getchars $file)"]+="$file "; done使用文件asdf.txt、fdsa.txt、foo、foobar、tadxfst.在目录中进行测试
for key in "${!files[@]}"; do printf "%s\t%s\n" "$key" "${files[$key]}"; donefoo 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'
]
};https://stackoverflow.com/questions/20552699
复制相似问题