Переименовать файлы на основе шаблона в пути

У меня есть тысячи файлов с именем «DOCUMENT.PDF», и я хочу переименовать их на основе числового идентификатора в пути. К сожалению, у меня нет доступа к команде переименования.

Три примера:

/000/000/002/605/950/ÐÐ-02605950-00001/DOCUMENT.PDF
/000/000/002/591/945/ÐÐ-02591945-00002/DOCUMENT.PDF
/000/000/002/573/780/ÐÐ-02573780-00002/DOCUMENT.PDF

Чтобы быть переименованным как, без изменения их родительского каталога:

2605950.pdf
2591945.pdf
2573780.pdf

person Cinda    schedule 23.01.2017    source источник
comment
Кажется, у меня нет доступа к команде переименования, вы имеете в виду, что у вас нет возможности выполнить команду mv? Если исходные файлы находятся в /000/000/002/..., из какой папки они взяты? Текущий каталог или корень? Куда вы хотите, чтобы результирующие файлы пошли?   -  person lurker    schedule 24.01.2017
comment
Да, я могу выполнить mv или cp. Исходные файлы находятся в текущем каталоге (не корневом). Полученные файлы могут перейти в текущий каталог. Спасибо за вашу помощь!   -  person Cinda    schedule 24.01.2017
comment
mv — это то, как вы переименовываете файл в Unix. Вы mотображаетеперевод на другое имя.   -  person lurker    schedule 24.01.2017


Ответы (2)


Используйте цикл for, а затем используйте команду mv

for file in *
do
  num=$(awk -F "/" '{print $(NF-1)}' file.txt | cut -d "-" -f2);
  mv "$file" "$num.pdf"
done
person Richard Hamilton    schedule 23.01.2017

Вы можете сделать это с помощью globstar в Bash 4.0+:

cd _your_base_dir_
shopt -s globstar               
for file in **/DOCUMENT.PDF; do # loop picks only DOCUMENT.PDF files
  # here, we assume that the serial number is extracted from the 7th component in the directory path - change it according to your need
  # and we don't strip out the leading zero in the serial number
  new_name=$(dirname "$file")/$(cut -f7 -d/ <<< "$file" | cut -f2 -d-).pdf

  echo "Renaming $file to $new_name"

  # mv "$file" "$new_name" # uncomment after verifying
done

См. этот связанный пост, в котором говорится о похожей проблеме: Как рекурсивно пройти по дереву каталогов и найти только файлы?

person codeforester    schedule 23.01.2017