Причудливая mv операция

Использование программы переименования, сильно завинченной некоторые мои файлы. Я пытаюсь вернуть их в порядке.

У меня есть файловая структура как это:

./Hello World/some-filename.ext
./Kitty Parade/another.ext
./Third Example/abc.ext
./some-filename.ext2
./another.ext2
./abc.ext2

Целью является перемещение файлы в текущей папке (./) назад к их исходным папкам.

Например:
another.ext2 принадлежит ./Kitty Parade/ папка
some-filename.ext2 принадлежит ./Hello World/ папка
abc.ex2 принадлежит ./Third Example/ папка'

Правило может быть описано как это: Если файл существует в текущей папке (./), найдите папку, чем содержит файл с тем же именем файла (но с другим расширением), и переместите его в ту папку.Примечание: нет никакого надежного отношения между ./myFilename и что файл ./originalFolderName.

Это произошло с более чем 4 000 файлов иначе, я сделаю это вручную. Какая-либо возможная справка?

2
задан 13.02.2010, 09:16

1 ответ

Попробуйте эту часть волшебства оболочки:

for i in *.*; do
  BASE=$(basename "$i" .ext2)
  LIST=*/"${BASE}".*
  DIR=$(dirname "${LIST}")
  mv -n "$i" "${DIR}"
done

Или как острота:

for i in *.*; do mv -n "$i" "$(dirname */"$(basename "$i" .ext2)".*)"; done

Прежде:

whitequark@forth:~/test$ ls *
test 1.ext2  test 2.ext2  test 3.ext2

f 1:
test 1.ext

f 2:
test 2.ext  test 3.ext

После:

whitequark@forth:~/test$ ls *
f 1:
test 1.ext  test 1.ext2

f 2:
test 2.ext  test 2.ext2  test 3.ext  test 3.ext2

-n переключатель защитит Вас от перезаписи чего-либо.

5
ответ дан 08.12.2019, 05:58

Теги

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