Замените имя файла родительским именем папки

Просто выстрел в синем, но делает

shopt -s checkwinsize off

работа?

2
11.06.2013, 00:04
3 ответа

Принятие Вашей оболочки является zsh, помещенным autoload -U zmv в Вашем ~/.zshrc, и выполненный

zmv '(*)/*.pdf' '$1/$1.pdf'
4
27.01.2020, 21:55

Следующее bash сценарий делает задание при вызове в родительском каталоге. Это делает так, даже когда файлы все не имеют того же расширения (они делают в Вашем ограниченном примере, но это могло бы быть совпадением):

#!/bin/bash
function dirnametofilename() {
  for f in $*; do
    bn=$(basename "$f")
    ext="${bn##*.}"
    filepath=$(dirname "$f")
    dirname=$(basename "$filepath")
    mv "$f" "$filepath/$dirname.$ext"
  done
}

dirnametofilename ./????/*

вызов там принимает любой файл в подкаталоге текущего каталога, который имеет имя с четырьмя символами. Можно обмениваться последней строкой с:

dirnametofilename $*

и укажите имена файлов как параметры к сценарию


Следующее создает несколько более глубокую иерархию, и использование находит для определения местоположения файлов. export -f удостоверьтесь bash запущенный find знает о функции:

mkdir -p x/y/z/1111 x/y/z/2222 x/y/z/1234
touch x/y/z/1111/1234.pdf
touch x/y/z/2222/2345.pdf
touch x/y/z/1234/3214.pdf

function dirnametofilename() {
  for f in $*; do
    bn=$(basename "$f")
    ext="${bn##*.}"
    filepath=$(dirname "$f")
    dirname=$(basename "$filepath")
    mv "$f" "$filepath/$dirname.$ext"
  done
}

export -f dirnametofilename

find . -name "*.pdf" -exec bash -c 'dirnametofilename "{}"'  \;
# and look at the result
find x
2
27.01.2020, 21:55
  • 1
    , из чего, если необходимо выполнить это в каталоге x from:/x/y/z/1111/1234.pdf –  Duy 13.06.2013, 15:23
  • 2
    просто подает функцию целый путь y/z/1111/1234.pdf, который это переименует к y/z/1111/1111.pdf. Используйте, например, найдите для определения местоположения, файлы (отзовитесь эхом сначала, чтобы видеть, получили ли Вы правильный набор имен, затем subsitute эхо с вызовом функции). –  Anthon 13.06.2013, 15:58
  • 3
    @duy расширил ответ, надежда, можно заставить это прокладывать себе путь. –  Anthon 13.06.2013, 16:14
echo ./1111/1234.pdf | perl -pe '$_.=$_; s/\/(.*?)\/.+\.(.*?)$/\/$1\/$1\.$2/' | xargs -n 2 mv
0
27.01.2020, 21:55

Теги

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