Файлы переименования пакета с Bash

Страницы PDF используют общие ресурсы, такие как шрифты, изображения и т. Д. При разделении документа общие ресурсы попадают в каждый полученный файл. Когда вы объединяете эти файлы, ресурсы могут не объединяться обратно (это зависит от того, как реализован инструмент слияния), в результате чего получается гораздо больший файл.

96
задан codeforester 12 June 2017 в 03:59
поделиться

5 ответов

Вы могли использовать функцию расширения параметра удара

for i in ./*.pkg ; do mv "$i" "${i/-[0-9.]*.pkg/.pkg}" ; done

, Кавычки необходимы для имен файлов с пробелами.

180
ответ дан tripleee 24 November 2019 в 05:34
поделиться

лучше используйте sed для этого, чего-то как:

find . -type f -name "*.pkg" |
 sed -e 's/((.*)-[0-9.]*\.pkg)/\1 \2.pkg/g' |
 while read nameA nameB; do
    mv $nameA $nameB;
 done

подсчет регулярного выражения оставляют как осуществление (как имеет дело с именами файлов, которые включают пробелы)

3
ответ дан devios1 24 November 2019 в 05:34
поделиться

Это, кажется, работает, предполагая, что

  • все заканчивается $pkg
  • , Ваш # версии всегда запускается с "-"

, снимают изоляцию с .pkg, затем снимают изоляцию-..

for x in $(ls); do echo $x $(echo $x | sed 's/\.pkg//g' | sed 's/-.*//g').pkg; done
1
ответ дан Steve B. 24 November 2019 в 05:34
поделиться

Если все файлы находятся в том же каталоге последовательность

ls | 
sed -n 's/\(.*\)\(-[0-9.]*\.pkg\)/mv "\1\2" "\1.pkg"/p' | 
sh

сделает Ваше задание. Команда sed создаст последовательность команд mv, которые можно затем передать по каналу в оболочку. Лучше первый показ конвейер без запаздывания | sh чтобы проверить, что команда делает то, что Вы хотите.

Для рекурсивного вызова через несколько каталогов используют что-то как

find . -type f |
sed -n 's/\(.*\)\(-[0-9.]*\.pkg\)/mv "\1\2" "\1.pkg"/p' |
sh

Обратите внимание, что в sed последовательность группировки регулярного выражения является скобками, которым предшествует обратная косая черта, \( и \), вместо одиночных скобок ( и ).

32
ответ дан Diomidis Spinellis 24 November 2019 в 05:34
поделиться

Я сделаю что-то вроде этого:

for file in *.pkg ; do
    mv $file $(echo $file | rev | cut -f2- -d- | rev).pkg
done

предполагаемый весь Ваш файл находятся в текущем каталоге. В противном случае попытайтесь использовать, находят, как рекомендуется выше Javier.

Править: Кроме того, эта версия не используют определенных для удара функций, как другие выше, который приводит Вас к большей мобильности.

10
ответ дан Diego Sevilla 24 November 2019 в 05:34
поделиться
Другие вопросы по тегам:

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