Удаление неизвестной / неспецифической строки после расширения файла в именах файлов - PullRequest
0 голосов
/ 27 ноября 2018

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

Необходимо удалить последнюю строку, все после расширения файла.Имя файла:

нечто-unknown.js? Ver = 12234 .... (последний бит тоже неизвестен)

Этот (ниже) я нашел в этот поток :

for nam in *sqlite3_done
do
    newname=${nam%_done}
    mv $nam $newname
done

Я знаю, что мне нужно использовать%, чтобы удалить бит с конца, но как мне использовать символы подстановки в последнем бите, когда он у меня уже есть?как селектор "для любого файла"?

Попробовал с битом модификации из вышеперечисленного:

for nam in *.js*
do
    newname=${ nam .js% } // removing all after .js
    mv $nam $newname
done

Я в MacOS Yosemite, получил bash shell и sed.Знайте о переименовании и sed, но я видел только темы с определенными строками, без подстановочных знаков для этой проблемы, кроме следующих:

Как переименовать файлы с использованием подстановочных знаков в bash?

https://unix.stackexchange.com/questions/227640/rename-first-part-of-multiple-files-with-mv

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018
for x in $(find . -type f -name '*.js*');do mv $x $(echo $x | sed 's/\.js.*/.js/'); done
0 голосов
/ 27 ноября 2018

Я думаю, что это то, что вы ищете с точки зрения замены параметров:

$ ls -C1
first-unknown.js?ver=111
second-unknown.js?ver=222
third-unknown.js?ver=333

$ for f in *.js\?ver=*; do echo ${f%\?*}; done
first-unknown.js
second-unknown.js
third-unknown.js

Обратите внимание, что мы исключаем ? как \?, чтобы сказать, что мы хотим соответствовать буквальному вопросительному знаку, отличая его от специального символа глобуса, который соответствует любому отдельному символу.

Переименование файлов будет выглядеть примерно так:

$ for f in *.js\?ver=*; do echo "mv $f ${f%\?*}"; done
mv first-unknown.js?ver=111 first-unknown.js
mv second-unknown.js?ver=222 second-unknown.js
mv third-unknown.js?ver=333 third-unknown.js

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

Если это необходимо полностью автоматизировать, вы можете удалить echo и выполнить mv напрямую.

...