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

У меня есть две цели, которые я пытаюсь достичь, и мне нужна помощь.

Вот обзор:

Существуют сотни папок / каталогов со случайными числами ( 5555#5555), содержащих один и тот же файл 001.pdf. Я бы хотел:

1: удалить символ "#" из каждой папки / каталога

2. Переименуйте файл 001.pdf, чтобы включить новые номера папок и файл 001.pdf.

Желаемый результат: папка 5555#5555 становиться 55555555 содержащий 001.pdf файл, который становится 55555555.001.pdf

Надеюсь, что это имеет смысл и спасибо.

2 ответа

Решение

Так что обновляйте: спасибо за предложения. Вот что я получил, чтобы работать на меня. Не лучший путь, но эй.

  curdir=`pwd`
  for f in `find . -maxdepth 1 -type d -name "*#*" -print`;
  do
   echo "folder is $f"
    newFolder=`echo $f | sed 's/#//g'`
    echo mv $f $newFolder
    mv $f $newFolder
    echo newfolder is $newFolder
    cd $newFolder
    for file  in `find . -maxdepth 1 -type f -printf '%f\n'`; do
      echo "mv $file to ${newFolder}_$file"
      mv $file ${newFolder}_$file
    done
    cd $curdir
  done
for f in *#*;
do
  newFolder=$(echo ${f//%})
  mv $f $newFolder
  newFile=$(printf $newFolder".001.pdf")
  mv $newFolder/001.pdf $newFolder/$newFile
done

Это должно сделать это, хотя могут быть более элегантные решения. Измените регулярные выражения для цикла, если вы хотите перехватывать другие файлы без #,

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