将文件夹中名为1,2,3,...,10,11,...的文件重命名为001,002,003,...,010,011,...按此顺序

时间:2018-01-16 11:50:03

标签: matlab ubuntu-14.04

我在一个文件夹中有一组文件,它们被命名为1,2,3,...,10,11,......我正在运行这些文件的MATLAB代码,它正在取文件作为1,10,11,12,......(错误的顺序),我不想要。 我想获取序列1,2,3,...中的文件。 那么,有没有办法在MATLAB中执行此操作(我使用dir()命令获取文件夹的所有文件)?

我的MATLAB代码如下:

text1.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
        if(e.keyCode == SWT.CR) {
            String textData = text1.getText();
            text1.setText("");

            // HERE IS THE IMPORTANT CODE PART, NO SELECTION IS NEEDED
            e.doit = false;
        }
    }
});

因此,上面的这个文件变量应该在序列1,2,3,......中的每个循环中获取所有文件。 但它正在进入1,10,11 ......序列(基于文本的方案)。 请按编号顺序帮助它。

3 个答案:

答案 0 :(得分:1)

当您使用shell标记此内容时,我认为您很乐意纠正shell中的问题。因此,您可以在shell中使用rename(也称为Perl renameprename)将所有数字填零以表示5个地方:

rename --dry-run 's/\d+/sprintf("%05d",$&)/e' *

所以,如果我从这开始:

-rw-r--r--   1 mark  staff    0 16 Jan 12:23 0
-rw-r--r--   1 mark  staff    0 16 Jan 12:23 1
-rw-r--r--   1 mark  staff    0 16 Jan 12:23 11
-rw-r--r--   1 mark  staff    0 16 Jan 12:23 2
-rw-r--r--   1 mark  staff    0 16 Jan 12:23 Freddy 73 Frog

我最终得到了这个:

-rw-r--r--   1 mark  staff    0 16 Jan 12:23 00000
-rw-r--r--   1 mark  staff    0 16 Jan 12:23 00001
-rw-r--r--   1 mark  staff    0 16 Jan 12:23 00002
-rw-r--r--   1 mark  staff    0 16 Jan 12:23 00011
-rw-r--r--   1 mark  staff    0 16 Jan 12:23 Freddy 00073 Frog

答案 1 :(得分:1)

这是一个MATLAB解决方案:

cd DirContainingFiles1,2,3,...
names = strsplit(ls);
[~,idx]=sort(str2double(names));
for name = names(idx)
    disp(name{1})
    ....
end

您无需重命名文件。使用ls获取文件列表。将它们转换为数字格式并获取已排序元素的索引。

如果您想使用dir

file_names= dir('DirContainingFiles1,2,3,...'); 
names = {file_names(3:end).name};
[~,idx]=sort(str2double(names));
for name = names(idx)
    disp(name{1})
    ....
end

答案 2 :(得分:0)

只需使用

@tmp

在进入循环之前,它按数值排序 而

[natsortfiles][1](file_names);

按文字值排序。