Змініть власника для всіх файлів, що належать x


4

Я копіював файли з моєї MacBook, переважно файли з / usr. Один і єдиний користувач на моєму комп'ютері називається "Julian" (як на моєму MacBook). Багато скопійованих файлів тепер належать "501" (id "Julian" з MB).

drwxrwxr-x@  28 501     admin   952  8 Jul 23:02 man/

Чи можна змінити власника всіх файлів, які належать "501", до "Julian"?

Відповіді:


7

Звичайно, з майже магічною командою пошуку. Найпростіший спосіб такий:

find . -user 501 -exec chown Julian {} +

Команда "Знайти" пояснюється на сторінці man, а також у ряді навчальних посібників і howtos цей , nut короткою ідеєю є "знайти все, що відповідає цим критеріям, і виконувати цю команду з кожним".

  • . означає шукати в (і нижче) поточний робочий каталог.
  • -user 501 означає знайти файли, що належать користувачеві 501.
    • Зауважимо, що це специфікація BSD; у деяких інших системах POSIX користувач приймає ім'я користувача, а окремий прапор uid приймає числові ідентифікатори користувачів.
  • -exec … {} + означає багаторазово запускати все, що знаходиться в "…" (в даному випадку, "chown Julian"), передаючи його якомога більше знайдених файлів.
    • Отже, якщо є 5000 файлів, це може призвести до виклику чотирьох разів (на перші 1203, потім на наступний 1888 і так далі).
    • Зверніть увагу, що це розширення BSD (хоча GNU має подібне розширення); є портативний еквівалент з ; замість +, але це один раз викличе chown для кожного файлу, що зазвичай займе набагато більше часу. (Стандартне рішення полягає в тому, щоб використовувати -print0 і вивести результат на xargs -0. Але, оскільки ви робите це в системі BSD, вам не потрібно це робити.)
    • Зауважте, що якщо ви вводите це в оболонці, деякі оболонки вимагатимуть виходу з фігурних дужок, але bash (типова оболонка на сучасних комп'ютерах) не має.

Баш не дбає про порожні дужки.

я пропоную chown Julian: щоб також оновити групу власності на групу за промовчанням Julian. Це технічно непотрібно, коли ви володієте файлами, але ніколи не знаєте, як це може вплинути на вас у дорозі.
Jason Salaz

1
І вам, напевно, потрібно пройти через sudo в команду десь, в ідеалі спереду (перед find ).
nohillside

2

Це зробить те, що ви хочете:

find . -type f -uid 501 -print0 | xargs -0 sudo chown Julian

Пояснення:

  • The . починає пошук з поточного каталогу.
  • The -type f потрібні лише файли для відповідності, а не каталоги. (Усуньте це, якщо ви хочете змінити теки.)
  • The -uid 501 вимагає, щоб усі відповідності належали користувачеві.
  • The -print0 відокремлює збіги по нулях замість пробілів, щоб будь-який шлях, що містить пробіли, не був неправильно інтерпретований.
  • The xargs -0 гарантує це xargs введення шукає роздільники нулів замість пробілів. З chown може приймати кілька файлів, xargs використовується для забезпечення цього sudo chown запускається тільки так часто, як це необхідно для впливу на всі перелічені файли. (У цьому відношенні це набагато швидше, ніж еквівалент find ... -exec.)

1
Це працює, але не ідіоматично в BSD, а надмірно складне. "-uid" є перемикачем "for-compatibility-with-GNU-only" в BSD find, і print0 / xargs -0 є непотрібним, оскільки BSD find має "exec ... +" формати.

0

Не впевнений, що це порушить речі в OS X, якщо файли пов'язані з системою. Але щоб змінити власника файлів, зробіть a

sudo chown -R Julian <directory>

-R означає, що власник змінюється для всіх файлів рекурсивно в поточній директорії. Так що будьте обережні.

man chown Вам слід надати додаткові деталі.


Файл, який не належить мені, розміщений у папці, що належить мені, буде розірваний пізніше (щодо правильної власності).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.