කණ්ඩායම් නැවත නම් කිරීම


160

මට රූපවලින් පිරුණු නාමාවලියක් ඇත:

image0001.png
image0002.png
image0003.png
...

එක ලයිනර් එකක් නම් කරන්න (කියන්න).

0001.png
0002.png
0003.png
...

මම මෙය කරන්නේ කෙසේද?


8
මෙය ඉහළම යුනික්ස් විධාන රේඛා නිතර අසන පැන වලින් එකක් වන අතර මට එය දැනටමත් මෙම වෙබ් අඩවියෙන් සොයාගත නොහැක, එබැවින් අපි මෙම ප්‍රජා විකිය සෑදිය යුතුද?
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

5
ඇයි කියලා මට පේන්නේ නැහැ. එය සත්‍යාපිත පිළිතුරක් සහිත නිශ්චිත ප්‍රශ්නයකි.
අන්තර්ජාල මිනිසා

3
ඔබ X ධාවනය කරන්නේ නම් එය thunar -B *.pngතුනාර්ගේ තොග වශයෙන් නම් කරන ලද ගු මෙවලමට වඩා පහසු නොවේ .
dotjoe

Answers:


113

ඔබ Bash හෝ වෙනත් POSIX- අනුකූල කවචයක් භාවිතා කරන්නේ නම්:

for f in *.png; do
    mv -- "$f" "${f#image}"
done

2
මෙය මෙන්ඩල් කූපර්ස් උසස් බාෂ්-ස්ක්‍රිප්ටින් මාර්ගෝපදේශය tldp.org/LDP/abs/html
W_Whalley

2
@W_Whalley මම දැඩි ලෙස නිර්දේශ වැළකී ඇති කිරීමට දෙසට වාසිදායක වන ලෙස, මග Wooledge බෑෂ් මාර්ගෝපදේශය .
වයිල්ඩ්කාඩ්

Ild විල්ඩ් කාඩ්: ඒබීඑස් මාර්ගෝපදේශය මග හැරීමට නිර්දේශ කිරීමට ඔබගේ හේතු මොනවාද?
ක්‍රිස්ටියන් සෙවරින්

H ක්‍රිස්ටියන් සෙවරින් නරක පුරුදු ප්‍රවර්ධනය කිරීම සහ සම්පූර්ණයෙන්ම බිඳුණු කේතය. මගේ පැතිකඩ පිටුවේ සබැඳි පරීක්ෂා කරන්න.
වයිල්ඩ්කාඩ්

විවිධ ගොනු රටා සඳහා මෙම උදාහරණය අනුවර්තනය කරන්නේ කෙසේදැයි ඔබ නොදන්නේ නම්, ඉහත සඳහන් කළ මාර්ගෝපදේශයේ පරාමිති පුළුල් කිරීමේ අංශය බැලීමට ඔබට අවශ්‍ය විය හැකිය .
lex82

115

ඩේබියන් සහ ව්‍යුත්පන්නයන් මත, පර්ල්ගේ renameකෘති මේ හා සමාන වේ sed:

  rename -v 's/image//' *.png

එහි ද වේ renameසිට util-linux, ඒ වෙනුවට, මේ වගේ බව වැඩ:

  rename image '' *.png

7
මෙය සැබවින්ම ස්ථාපනය කළ යුතු පර්ල් වැඩසටහනක් බවත් එය තර්කය ලෙස නිත්‍ය ප්‍රකාශන අවශ්‍ය බවත් ඔබ පැහැදිලි කළ යුතුය.

අහ්, මම ඒ ගැන දැනගෙන හිටියේ නැහැ. මම එය හඳුනාගත් විට කැනොනිකල් පිළිතුරට ගෞරවය දෙන්නෙමි :)
අන්තර්ජාල මිනිසා

5
මෙම renameවැඩසටහන පැමිණියේ පර්ල් උදාහරණ බෙදාහැරීමකිනි. ඩේබියන් සහ උබුන්ටු එය නැව්ගත කරති /usr/bin/rename. වෙනත් යුනික්ස් ප්‍රභේදයන් එය සපයන්නේ නැත, නැතහොත් සම්පූර්ණයෙන්ම වෙනස් විය හැකිය /usr/bin/rename.
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

1
සමහර අනුවාද rename ගනිත් වූ සිට කිරීමට වෙනුවට රටාව:rename [options] <expression> <replacement> <file>...
melds

1
ඔබ ඩේබියන් පදනම් කරගත් පද්ධතියක් භාවිතා කරන්නේ නම් sudo apt-get install rename, එවිට ඔබට rename විධානය භාවිතා කළ හැකිය. එය ගොනු නාම සඳහා sed.
ctrl-alt-delor

42

zmv

Zsh කවචයේ ප්‍රබල කණ්ඩායම් නැවත නම් කිරීමේ විධානයක් zmvඇත.

පළමුව ඔබ zmvපහත පරිදි විධානය සක්‍රීය කළ යුතුය (මෙය ඔබගේ තුළට යා හැකිය ~/.zshrc).

autoload zmv

මූලික වාක්‍ය ඛණ්ඩය වේ zmv PATTERN REPLACEMENT. රටාව ෂෙල් ග්ලෝබ් ප්‍රකාශනයකි. රටාවේ කොටස් වරහන් වලින් වට කළ හැකිය. විස්ථාපනය පෙළ අඩංගු විය හැක $1, $2රටාව තුළ අර්ථදැක්වීම parenthesised පිරිසක් වෙත යොමු කිරීමට ආදිය. උදාහරණයක් වශයෙන්:

zmv 'image(*.png)' '$1'

ඔබ ද zsh ස්වයංක්රීයව අර්ථ දැක්වීමට අහන්න පුළුවන් $1, $2ආදිය රටාව තුළ ආදේශක චරිත වලට ගැලපෙන,:

zmv -w 'image*.png' '$1.png'

4
sweeeeeeeeeeeeeeeet. මම zsh ඉගෙන ගත යුතු තවත් හේතුවක්.
ixtmixilix

1
xtixtmixilix ඉගෙන ගත යුත්තේ කුමක්ද? එය භාවිතා කිරීම අරඹා සමහර විට අතිවිශිෂ්ටත්වය සඳහා prezto ( github.com/sorin-ionescu/prezto ) එක් කරන්න .
ජෙරී

ඇත්තෙන්ම සිසිල්, zmv හි මිනිසා පෙන්වා ඇති පරිදි මෙය අන්වර්ථය mmv = 'noglob zmv -W': mmv * .c.orig origin / * එකතු කිරීමෙන් තවදුරටත් සරල කළ හැකිය. C
බ්‍රෙට්ස්කෝ

සක්රිය zmvprezto ඔබේ ~ / .zpreztorc පහත දැක්වෙන රේඛාව uncommenting අවශ්ය # Set the Zsh functions to load (man zshcontrib).දීමzstyle ':prezto:load' zfunction 'zargs' 'zmv'

35

මම සාමාන්‍යයෙන් මෙම භාවිත කේතය සඳහා ලස්සන හා සරල mmv ( man page ) උපයෝගීතාව භාවිතා කරමි:

$ mmv "image*.png" "#1.png"

ඔබේ කාර්යය ඉටු කරයි.

මෙම #1ඉලක්කය රටාව තුල මූල රටාව තුළ ආදේශක තරග ඕනෑම දෙයක් සමග පත් කරනු ලැබේ. මෙය ආදේශක කාඩ්පත් කිහිපයක් සඳහා ද ක්‍රියා කරන අතර ගොනු නාමවල කොටස් අනුපිළිවෙල වෙනස් කිරීමට උදාහරණයක් ලෙස භාවිතා කළ හැකිය. කුඩා අකුරු ලොකු අකුරු බවට පරිවර්තනය කිරීම වැනි වඩාත් සංකීර්ණ දේ ඔබට පහසුවෙන් කළ හැකිය.

උපුටා දැක්වීමෙන් කවචයෙන් රටා ආරක්ෂා කිරීමට වග බලා ගන්න.


මෙම උපයෝගීතාව පෙන්වා දීමට ස්තූතියි. මම එය ඩේබියන්, උබුන්ටු සහ සිග්වින් ගබඩාවලින් සොයා ගතිමි. මෑන් පිටුව සමඟ මට කරදරයක් ඇති නමුත් ඔබ වෙබ් පිටු කිහිපයක් සහ මෙම ස්ටැක් පිටාර ගැලීමේ ප්‍රශ්නය සොයා ගත් අතර එය ඔබ එය භාවිතා කරන ආකාරය පැහැදිලි කිරීමට උපකාරී විය. stackoverflow.com/questions/417916/how-to-do-a-mass-rename
W_Whalley

ස්තූතියි, පිළිතුර වඩාත් පැහැදිලි කිරීම සඳහා මම තවත් තොරතුරු කිහිපයක් එකතු කළෙමි.
මාසෙල් ස්ටිම්බර්ග්

4
එය ප්‍රමාණවත් ලෙස ඉහළ නැංවිය නොහැක! එය එතරම් සරල හා මිත්‍රශීලී ය. හෝම්බ rew හි OS X සඳහා ලබා ගත හැකිය.
ග්‍රෙග් ඩුබිකි

10

ලූප සඳහා POSIX sh

නැවත නම් කිරීම සඳහා sed භාවිතා කරයි

for i in image*jpg
do 
  mv -v "$i" "$(echo "$i" | sed -e 's/^\.\/image//' - )"
done

6

මම පර්ල්ට කැමතියි:

perl -nlE '$old=$_; s/image//; qx(mv $old $_)'

වෙනත් නාමාවලියකට ගොනු පිටපත් කිරීම වැනි වෙනත් කාර්යයන් සඳහා ඔබට එකම රටාව භාවිතා කළ හැකිය:

perl -nlE '$old=$_; s(image)(/path/to/new/dir/); qx(mv $old $_)'

2
හෝ (ආරක්ෂිතයි!):rename($old,$_)
ප්‍රතිස්ථාපනය කරන්න

6

qmv

qmvසිට විධානය renameutilsමඟින් ටැබ් එකකින් වෙන් කර ඇති තීරු දෙකක් සහිත ගොනු නාම ලැයිස්තුවක් පෙන්වන සංස්කාරකයක් විවෘත කරයි. සෑම පේළියකම එක් ගොනු නාමයක් පෙන්වයි, තීරු දෙකෙහිම සමාන වේ. දකුණු තීරුව ලිපිගොනු වල නව නම් නිරූපණය කරයි.
වෙනස්කම් කිරීමට, දකුණු පැත්තේ නම් සංස්කරණය කරන්න. මෙම උදාහරණයේ දී,:%s/... හෝ දෘශ්‍ය වාරණ ප්‍රකාරය ප්‍රයෝජනවත් වේ.

ඔබගේ සංස්කාරකයේ ගොනු නාම

$ qmv *.png

සංස්කාරකයේ:

image0001.png           image0001.png
image0002.png           image0002.png
image0003.png           image0003.png         
~                                             
~                                             
~                                             
~                                             
"/tmp/user/1000/qmvxWyVMs" 3L, 93C

දකුණු තීරුවේ නම් සංස්කරණය කරන්න:
( imageදෘශ්‍ය වාරණ ප්‍රකාරය භාවිතයෙන් සියලු පේළි වලින් උපසර්ගය ඉවත් කිරීම )

image0001.png           0001.png
image0002.png           0002.png
image0003.png           0003.png         
~                                             
~                                             
~                                             
~                                             
:wq

නැවත නම් කිරීමේ ලොගය:

image0001.png -> 0001.png
image0002.png -> 0002.png
image0003.png -> 0003.png

(උදා: උබුන්ටු: apt-get install renameutils)


3

පුනරාවර්තන

පින්තූර * png ලිපිගොනු තෝරා ගැනීම පහසු වන අතර ගොනු නාමවල නව රේඛා සමඟ කටයුතු කිරීමට අවශ්‍ය නොවන බව උපකල්පනය කරයි

find . -name "image*.png" | while read f; do mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; done

ආරක්ෂිත, අවකාශ, නව රේඛා, බැක්ස්ලෑෂ් සහ වෙනත් ඕනෑම දෙයක් සමඟ කටයුතු කළ හැකිය :

find . -name "image*.png" | while IFS= read -r f; do 
   mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; 
done


1

POSIX sh ටික වේලාවක් භාවිතා කරමින්

විධානයෙන් නම් කියවීම find.

find . -maxdepth 1 -type f -name 'image*png' | while IFS= read -r f; do
  mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"
done

ගොනුවකින් නම් කියවීම

while IFS= read -r f; do mv -v "$f" "$(echo "$f"|sed -e 's/^\.\/image//' - )"; done < flist

1

නිත්‍ය ප්‍රකාශනය (වින්ඩෝස්, ලිනක්ස් සහ ඕඑස් එක්ස් සඳහා සහය දක්වයි) හරහා ගොනු / නාමාවලි නැවත නම් කිරීම සඳහා ආරක්ෂිත හරස් වේදිකා විධාන රේඛා මෙවලමක් වන බ්‍රෙනේම් ( https://github.com/shenwei356/brename ) උත්සාහ කරන්න .

atpatrickDurusau පැවසුවේ:

ලිනක්ස් සතුව විවිධ කණ්ඩායම් ලිපිගොනු නැවත නම් කිරීමේ විකල්පයන් ඇත, නමුත් මා වෙත පැන ඇති බ්‍රෙනේම් හි කෙටි-පැමිණීම් කිසිවක් මා දුටුවේ නැත.

විශේෂාංග:

  • හරස් වේදිකාව . වින්ඩෝස්, මැක් ඕඑස් එක්ස් සහ ලිනක්ස් සඳහා සහය දක්වයි.
  • ආරක්ෂිතයි . විභව ගැටුම් සහ දෝෂ පරීක්ෂා කිරීමෙන් .
  • ගොනු පෙරීම . සාමාන්‍ය ප්‍රකාශනය හරහා ලිපිගොනු ඇතුළත් කිරීම සහ බැහැර කිරීම සඳහා සහාය වීම. වැනි විධාන ක්‍රියාත්මක කිරීමට අවශ්‍ය නැත find ./ -name "*.html" -exec CMD.
  • යතුරු අගය ගොනුව හරහා අනුරූප අගය සමඟ අනුරූපය නැවත නම් කිරීම .
  • ආරෝහණ නිඛිලය හරහා නැවත නම් කිරීම .
  • ලිපිගොනු සහ නාමාවලි යන දෙකම පුනරාවර්තනය කිරීම .
  • වියළි ධාවනය සඳහා සහාය වීම .
  • වර්ණවත් ප්‍රතිදානය .

විධානය:

$ brename -f .png -p image
[INFO] checking: [ ok ] 'image0001.png' -> '0001.png'
[INFO] checking: [ ok ] 'image0002.png' -> '0002.png'
[INFO] checking: [ ok ] 'image0003.png' -> '0003.png'
[INFO] 3 path(s) to be renamed
[INFO] renamed: 'image0001.png' -> '0001.png'
[INFO] renamed: 'image0002.png' -> '0002.png'
[INFO] renamed: 'image0003.png' -> '0003.png'
[INFO] 3 path(s) renamed

1

සඳහා වින්ඩෝස් සහ ලිනක්ස් , මේ අතර perl බසට තිර රචනය කරන්නේ, මේ අවස්ථාවේ දී:

$ rnm -l 's/^image//' '*.png'

ස්ක්‍රිප්ටය ඩිරෙක්ටරි යටතේ පුනරාවර්තනය විය හැකි අතර ඒ සියල්ලටම ගණනය කිරීමක් පවා කළ හැකිය:

$ rnm -r 's/^/$counter./' '/\.png$/'

වින්ඩෝස් සහ ලිනක්ස් යන දෙඅංශයෙන්ම යූටීඑෆ් -8 අක්ෂර නිවැරදිව සලකනු ලැබේ.



-5

ls * png | කියවන අතරතුර -rf; do f2 = "` echo $ f | sed -e's / image // '`"; mv $ f $ f2; ඉවරයි


යමක් වැරදියි: "mv: 'image0001.png' පසු ගමනාන්ත ගොනුව ක්‍රියා නොකරයි"
අන්තර්ජාල මිනිසා

3
ඔබගේ කේතය සමඟ ගැටලු රාශියක් ඇත. ප්‍රතිදානය විග්‍රහ lsකිරීම කරදරයක් ඉල්ලා සිටීමකි . readවිය යුතුය read -r. සියලු විචල්‍ය ආදේශක ද්විත්ව මිල ගණන් තුළ තිබිය යුතුය.
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

ඔබට මෙය වඩාත් effectively ලදායී ලෙස ලිවිය හැකිය for f in *png; do f2="$(echo "$f" | sed -e 's/image//')"; mv "$f" "$f2"; done. විග්‍රහ lsකිරීම අවශ්‍ය හෝ හොඳ අදහසක් නොවේ .
කොජිරෝ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.