2017-01-23 11 views
2

У меня есть тысячи файлов с именем «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 
+0

* Я, кажется, не имеют доступа к командному переименования *, вы имеете в виду вы не имеете возможности, чтобы выполнить 'мв 'команда? Если исходные файлы находятся в '/ 000/000/002/...', в какой папке это основано? Текущая директория или корень? Где вы хотите, чтобы результирующие файлы уходили? – lurker

+0

Да, я могу выполнить mv или cp. Исходные файлы из текущего каталога (не root). Полученные файлы могут перейти в текущий каталог. Спасибо за вашу помощь! – Cinda

+0

'mv' - как вы« переименовываете »файл в Unix. Вы ** m ** o ** v ** с другим именем. – lurker

ответ

0

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

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

Вы можете сделать это с помощью 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 

Смотрите этот пост, связанный, что переговоры о подобной проблеме: How to recursively traverse a directory tree and find only files?

 Смежные вопросы

  • Нет связанных вопросов^_^