Переместите несколько файлов в каталог, если их имена содержат ту же строку, что и в имени dir

У меня есть несколько файлов в одной папке:

ABA.xy
BEB.xy
ACA.xy

Те же файлы с разным расширением в другой папке

ABA.rr
BEB.rr
ACA.rr

Затем у меня есть одна папка для каждого имени файла [ ! d2]

ABA
BEB
ACA

Я хотел бы сделать следующее. если файл с расширением .xy и .rr имеет то же имя, что и папка, перейдите в эту папку. Например,

ABA.xy and ABA.rr in ABA

Я знаком с mv, но я думаю, что здесь я должен написать небольшой скрипт для этого.

1
задан 30 January 2015 в 15:40

1 ответ

Немного другой подход с использованием rename:

rename 's#.*/(.+)(\.\w+)#mkdir "dest/$1"; "dest/$1/$1$2"#e' source/{a,b}/*

Это по существу просто использование регулярного выражения для перевода путей. Мы используем немного Perl (который поддерживает rename) для создания новых каталогов, и переименование перемещает файл в конце.

Это не слишком умно. Он не будет искать случаи, когда нет соответствующего файла (мы могли бы искать и удалять каталоги только с одним файлом), и он, вероятно, взорвется, если есть файлы без расширений.

$ mkdir -p source/{a,b} dest
$ touch source/a/{ABA,BEB,ACA}.xy
$ touch source/b/{ABA,BEB,ACA}.rr
$ tree
.
├── dest
└── source
    ├── a
    │   ├── ABA.xy
    │   ├── ACA.xy
    │   └── BEB.xy
    └── b
        ├── ABA.rr
        ├── ACA.rr
        └── BEB.rr

$ rename 's#.*/(.+)(\.\w+)#mkdir "dest/$1"; "dest/$1/$1$2"#e' source/{a,b}/*
$ tree
.
├── dest
│   ├── ABA
│   │   ├── ABA.rr
│   │   └── ABA.xy
│   ├── ACA
│   │   ├── ACA.rr
│   │   └── ACA.xy
│   └── BEB
│       ├── BEB.rr
│       └── BEB.xy
└── source
    ├── a
    └── b
2
ответ дан 23 May 2018 в 23:43

Другие вопросы по тегам:

Похожие вопросы: