මම නැවත නැවත චවුන් වැඩ කරන්නේ කෙසේද?


317

මට pdfsඋප-උප-නාමාවලි පොකුරක් අඩංගු නාමාවලියක් ඇත. සියලුම උප ෆෝල්ඩරවල ඇති සියලුම PDF ගොනු වල හිමිකාරිත්වය වෙනස් කිරීමට මට අවශ්‍යය. මම මෙය උත්සාහ කළෙමි:

chown -R someuser:somegroup *.pdf

... නමුත් එය උප බහලුම් වල PDF වල හිමිකාරිත්වය වෙනස් කළේ නැත. පරිශීලකයා සහ කණ්ඩායම පවතී.

සඳහා man පිටුවට අනුව chown, -Rපුනරාවර්තන යන්නෙන් අදහස් කළ යුත්තේ:

-R, --recursive
          operate on files and directories recursively

මට නැති වී ඇත්තේ කුමක්ද?

Answers:


328

පුනරාවර්තන මාදිලිය ක්‍රියාත්මක වන්නේ ගොනු මත නොව නාමාවලි මත පමණි. '* .Pdf' ග්ලෝබ් භාවිතා කිරීමෙන් කවචය ගොනු ලැයිස්තුව චව්න් වෙත යවන අතර ඒවා ගොනු බව දකින අතර එය දකින ලිපිගොනු වල අවසරයන් වෙනස් කරයි, එපමණයි.

මතක තබා ගන්න, ෂෙල් වෙඩි වලදී, ගෝලය තක්සේරු කරනු ලබන්නේ කවචය මිස විධානය නොවේ. ග්ලෝබ් ලිපිගොනු සමඟ ගැලපෙන්නේ නම්, ඒවා විධානය වෙත යවනු ලබන අතර විධානය කිසි විටෙකත් ග්ලෝබ් පවතින බව නොදනී. (මෙය වින්ඩෝස් විධාන විමසුමේදී දේවල් කිරීමට වඩා වෙනස් වේ). ඔබට ඩර් එකක් තිබේ නම්, අන්තර්ගතය සමඟ:

machine:$ ls -F
file1.pdf  file2.pdf  other.txt  subdir/

ඔබ ටයිප් කළේ:

chown -R someuser:somegroup *.pdf

කවචය මුලින්ම ලැයිස්තුව සාදනු ඇත: file1.pdf file2.pdf

ඉන්පසු ඔබේ විධානය ක්‍රියාත්මක කරන්න:

chown -R someuser:somegroup file1.pdf file2.pdf

බලන්න, -R ක්‍රියාත්මක වීමට නාමාවලියක් නොමැත. එය ඔබ ඉල්ලූ දේ කරයි - විධාන රේඛාවේ ඇති ගොනු දෙකෙහි හිමිකාරිත්වය වෙනස් කරන්න, එම විචක්ෂණ -R ධජය නොසලකා හරින්න.

ඔබට අවශ්‍ය දේ කිරීමට, මෙම නාමාවලිය සහ උප බහලුම් සඳහා රටාවක් ලෙස '* .pdf' භාවිතා කිරීමට find, ඔබට භාවිතා කළ හැකිය , එමඟින් ගොනු නාම රටාවකට (හෝ වෙනත් බොහෝ ක්‍රිටීරියා) ගැලපෙන ගොනු සොයා ගත හැකි අතර උප කමාන්ඩ් වෙත යන්න

find . -type f -name '*.pdf' | xargs chown someuser:somegroup

මෙය ආරම්භ වන්නේ වත්මන් ඩිර් වලින්. ' නාම රටාවේ ගොනු (ගොනු වර්ගය f) '*.pdf'සෙවීම සඳහා xargs වෙත ගමන් කරයි, එය chmod වෙත විධාන රේඛාවක් සාදයි. රටාව වටා ඇති උපුටා දැක්වීම් '*.pdf'සැලකිල්ලට ගන්න, කවචයට හැකි නම් එය ග්ලෝබ් එකක් නිර්මාණය කරන බව මතක තබා ගන්න, නමුත් ඔබට රටාව සම්මත කර ගැනීමට findඅවශ්‍ය බැවින් එය උපුටා දැක්විය යුතුය.

ගොනු නාමවල අවකාශයන් තිබිය හැකි බැවින්, අවකාශයක් සහිත ගොනු නාමයක් ආරක්ෂිත කිරීමට උපක්‍රමයක් භාවිතා කිරීමට ඔබට අවශ්‍යය:

find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup

බාෂ් 3 සහ පහළින්, ඔබ එය කළ යුතු ආකාරය මෙයයි. බාෂ් 4 (සමග shopt -s globstar) සහ අනෙකුත් ෂෙල් වෙඩි වලින් වඩාත් ප්‍රබල ග්ලෝබිං ලබා ගත හැකිය . පුනරාවර්තන ග්ලෝබ් භාවිතා කරමින් zsh හි සමාන වේ **:

chown -R someuser:somegroup ./**/*.pdf

1
shopt -s globstarපුනරාවර්තන ග්ලෝබින් සමඟ එම බැෂ් 4 පිළිබිඹු කිරීම සඳහා සංස්කරණය කරන ලදි .
kojiro

o කොජිරෝ ස්තූතියි! ඔබට කිව හැකි පරිදි මම තවමත් bash3
Rich Homolka

2
මුල් පෝස්ටරයේ පෙන්වා ඇති මෑන් පිටුවට අනුව, චවුන්-ආර් ඇත්ත වශයෙන්ම ෆෝල්ඩර සහ ලිපිගොනු වල හිමිකරු වෙනස් කර ඇති බව මට පෙනී ගියේය. සොයා ගැනීමට අවශ්‍ය නැත. මින්ට් 15 භාවිතා කිරීම
gwideman

wgwideman මම දන්නවා මේක පරණයි කියලා ... නමුත් ඔව්, ඇත්තෙන්ම -R පුනරාවර්තනය කරයි. OP හට නිශ්චිත ආකාරයේ පුනරාවර්තනයක්, දිගුවක් සහ "ගොනු වර්ගය ගොනුව" පෙරහන් කළ එකක්
රිච් හෝමොල්කා

Ich රිච්හෝමොල්කා අහ්. OP කියා සිටියේ ලිපිගොනු 'pdfs' නම් නාමාවලියක ඇති බැවින් මම සිතුවේ ගැටළුව නැවත ලබා ගැනීම සඳහා pdfs නාමාවලිය ලෙස නියම කරන්නේ කෙසේද යන්න සහ එහි ඇති සියලුම ලිපිගොනු pdfs බැවින් ඒවා විශේෂයෙන් තෝරා ගැනීමට අවශ්‍ය නොවන බවයි. කාර්යය වන්නේ පීඩීඑෆ් ලිපිගොනු පමණක් තෝරාගෙන අනෙක් ඒවා නොවෙනස්ව තබා ගැනීම නම් ඔබ නිවැරදිය.
gwideman

61
chown -R someuser:somegroup /your/folder/here/*

මෙය සියලුම ලිපිගොනු සහ නිශ්චිත ෆෝල්ඩරයේ සියලුම උප බහලුම් සහ උප උප බහලුම් වලට චව්න් අදාළ වේ. පරිස්සමින් භාවිතා කරන්න.


2
කෙසේ හෝ sudo chown -R user ./මා වෙනුවෙන් වැඩ කළ නමුත් sudo chown -R user ./*එසේ නොවීය
ස්ලාව්

1
මෙය පැරණි බව මම දනිමි, නමුත් මෙය සිරස්තලයට පිළිතුරු දුන්නද ප්‍රශ්නයට පිළිතුරු නොදෙයි. මෙය ඇත්ත වශයෙන්ම OP දැනටමත් උත්සාහ කළ දෙයට වඩා තරමක් නරක ය.
පොහොසත් හෝමොල්කා

3
Ich රිච්හෝමොල්කා මෙහි ගෙන එනු ලැබුවේ ප්‍රශ්න මාතෘකාව නිසා පමණක් වන අතර, මෙම පිළිතුර සොයා ගැනීම ගැන මම සතුටු වෙමි.
ෆීලික්ස් ගග්නොන්-ග්‍රෙනියර්

@ ෆීලික්ස්ගග්නොන්-ග්‍රෙනියර් සාධාරණයි. මෙම පිළිතුර ඔබ වෙනුවෙන් ක්‍රියාත්මක වන්නේ නම් මම ඉතා සතුටු වෙමි. නමුත් එය මුල් ප්‍රශ්නය සඳහා ක්‍රියා නොකරනු ඇත.
පොහොසත් හෝමොල්කා

1
මෙය මගේ සැඟවුණු ලිපිගොනු සඳහා ("තිත් ලිපිගොනු") වැඩ කළේය
ලොබි

14

ඔබට findඋපයෝගීතාව භාවිතා කළ හැකිය:

find . -name '*.pdf' -exec chown someuser:somegroup {} +

කරුණාකර අවට ඇති මිල ගණන් අමතක නොකරන්න *.pdf. එසේ නොමැතිනම් කවචය එය පුළුල් කිරීමට උත්සාහ කරනු ඇත. මෙයින් අදහස් කරන්නේ දැනටමත් *.pdfඩිරෙක්ටරියේ ඇති සියලුම PDF ගොනු වල නම් සමඟ කවචය ප්‍රතිස්ථාපනය වන බවයි. නමුත් එය ඔබට අවශ්‍ය නොවේ. ඔබට උප බහලුම්වල ඇති PDF ගොනු සොයා ගැනීමට අවශ්‍යය. Btw.: ඔබේ chownවිධානයේ ගැටලුව එයයි .


1
මට +කාර්ය සාධනය සඳහා පිළිවෙලට ඇති උපක්‍රමය සොයා බැලීමට සිදු විය . -exec command {} +-Exec ක්‍රියාවෙහි මෙම ප්‍රභේදය තෝරාගත් ලිපිගොනු වල නිශ්චිත විධානය ක්‍රියාත්මක කරයි, නමුත් විධාන රේඛාව ගොඩනඟා ඇත්තේ තෝරාගත් එක් එක් ගොනු නාමය අවසානයේ එකතු කිරීමෙනි; විධාන වල මුළු ආයාචනා ගණන ගැලපෙන ගොනු සංඛ්‍යාවට වඩා බෙහෙවින් අඩු වනු ඇත. විධාන රේඛාව එහි විධාන රේඛා සාදන ආකාරයටම xargsගොඩනගා ඇත. {}විධානය තුළ අවසර දී ඇත්තේ එක් අවස්ථාවක් පමණි . ආරම්භක නාමාවලියෙහි විධානය ක්‍රියාත්මක වේ.
පැට්‍රික් එම්

+ පැට්‍රික් එම් (සුළු) + වාසිය + එදිරිව; .... ප්ලස් යනු ෂෙල් මෙටා චරිතයක් නොවන අතර එයින්
පොහොසත් හෝමොල්කා

6

විධානය

chown -R someuser:somegroup *.pdf

.pdf හි නාමාවලිය අවසන් වුවහොත් පමණක් ඩිරෙක්ටරි නැවත ලබා ගනී. ඔබට මෙවැනි දෙයක් අවශ්‍යයි:

find . -name "*.pdf" -exec chown someuser:somegroup {} \;

තාක්ෂණික වශයෙන් එය යන්නේ එක් මට්ටමකට පමණි. ඔබ එය සත්‍ය පුනරාවර්තනය ලෙස හැඳින්වුවද නැතත් එය පරිශීලකයාගේ අභ්‍යාසයකි :)
පොහොසත් හෝමොල්කා

1

නාමාවලියක හිමිකාරිත්වය වෙනස් කිරීමට පුනරාවර්තන ලෙස සරලව භාවිතා කරන්න:

sudo chown -R <username>:<groupname> <dir name>

මෙහි පරිශීලක නාමය = නාමාවලියෙහි හිමිකරු විය යුතු නව පරිශීලකයා

groupname = නාමාවලියෙහි හිමිකරු විය යුතු නව කණ්ඩායම

සෑම ගොනුවකටම / නාමාවලියකටම පරිශීලක හිමිකරුවෙකු සහ කණ්ඩායම් හිමිකරුවෙකු සිටී


OP ඉල්ලූ දේ මෙය නොකරයි. මෙය සෑම දෙයකම හිමිකාරිත්වය වෙනස් කරයි, OP විසින් විශේෂිත ගොනු සමූහයක් ඉල්ලා සිටියේය.
පොහොසත් හෝමොල්කා

0

මම treeඒ වෙනුවට භාවිතා කරමි :

 sudo tree -fai ~/.blabla  | xargs -L1 -I{} sudo chown youruser:youruser {}

'/' නාමාවලියෙහි හෝ වෙනත් පද්ධති නාමාවලියක පුනරාවර්තන චව්න් හෝ chmod ධාවනය නොකිරීමට වගබලා ගන්න.


0

නාමාවලියක ඇති සියලුම ලිපිගොනු වල හිමිකරු වීමට, භාවිතා කරන්න

find directory -type f -name '*' | sudo xargs -d '\n' chown $USER

වෙනුවට

sudo chown $USER directory\*

හෝ

sudo chown --recursive $USER directory

* (නාමාවලියෙහි ඇති ලිපිගොනු වැඩිය) විසින් නිපදවන ලද තර්ක විශාල ප්‍රමාණයක් තිබේ නම් හෝ ඔබට අවශ්‍ය දේ පිළිවෙලින් නොකරන්නේ නම් එය ක්‍රියා නොකරනු ඇත.

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.