Come posso fare il lavoro chown recursivamente?

Ho una directory denominata pdfs che contiene un gruppo di sub e sub-sub-directory. Voglio cambiare la properties; su tutti i file PDF in tutte le sottocartelle. Ho appena provato questo:

 chown -R someuser:somegroup *.pdf 

… ma non ha modificato la properties; dei PDF in sottodirectory. L'utente e il gruppo esistono.

Secondo la pagina man per chown , il -R dovrebbe significare ricorsivo:

  • Sottrazione del file video in più segmenti
  • Unix: Come unire due directory
  • Ricaricare le assegnazioni di gruppo di un utente Linux senza eseguire la disconnessione
  • I file su SMB-Share sono bloccati e alcune applicazioni non possono toccarle
  • Come call un programma da eseguire con i privilegi di amministratore ma con lo stesso utente (prompt di comandi di Windows)
  • Come eseguire un programma con autorizzazioni elevate da un account utente autorizzato a limitazione senza password amministratore?
  •  -R, --recursive operate on files and directories recursively 

    Che cosa mi manca?

  • Autorizzazioni utente: Daemon e User
  • Come faccio a cercare una parola o una frase nel command 'man' di Linux e passare attraverso le soluzioni trovate?
  • Lo script Powershell con autorizzazioni elevate ha ancora delle autorizzazioni insufficienti
  • Come avviare vim senza eseguire / etc / vimrc?
  • Quali sono le parentesi e il numero dopo un command Unix o una function C?
  • Errore di operazione "Imansible aprire la directory dei profili utente, perché non hai i privilegi sufficienti" dopo la perdita di potenza
  • 5 Solutions collect form web for “Come posso fare il lavoro chown recursivamente?”

    La modalità ricorsiva funziona solo in directory, non in file. Utilizzando il glob '* .pdf' la shell sta passando l'elenco dei file in chown, che vede questi sono file e modifica le autorizzazioni sui file che vede, e lo è.

    Ricorda, nelle shell, il glob viene valutato dalla shell, non dal command. Se il glob corrisponde i file, vengono passati al command e il command non sa mai che un glob è esistito. (Questo è diverso da come viene usato il prompt di Comando di Windows per fare le cose). Se hai un dir, con il contenuto qualcosa di simile:

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

    E hai digitato:

     chown -R someuser:somegroup *.pdf 

    La shell prima farebbe l'elenco: file1.pdf file2.pdf

    e quindi eseguire il command:

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

    Vedi, non esiste alcuna directory per -R per agire. Fa quello che l'hai chiesto – cambia la properties; sui due file della row di command, ignorando quella squalifica -R flag.

    Per fare ciò che si desidera, utilizzare il file '* .pdf' come model per questa directory e sottodirectory, è ansible utilizzare il file find , che può trovare file che corrispondono a un pattern di filename (oa molti altri criteri) e passare a un sottocommand

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

    Questo inizia in dir dir '.' per cercare i file (filetype f) del pattern nome '*.pdf' poi passa a xargs, che costruisce una row di command a chmod. Notate le virgolette intorno al motivo '*.pdf' , ricordatevi che la shell creerà un glob se può, ma vuoi che il model sia passato per find , quindi devi citarlo.

    Poiché i nomi dei file possono avere spazi in essi, si desidera utilizzare un trucco per rendere sicuro il nome del file con gli spazi:

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

    In bash 3 e inferiore, è questo il modo in cui devi farlo. Il più potente globbing è disponibile in bash 4 (con shopt -s globstar ) e altre shell. Lo stesso in zsh, utilizzando un glob ricorsivo ** :

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

    È ansible utilizzare l'utilità di find :

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

    Non dimenticate le quotazioni intorno a *.pdf . Altrimenti la shell cercherà di ampliarla. Ciò significa che già la shell sostituirà *.pdf con i nomi di tutti i file PDF trovati nella directory corrente. Ma non è quello che vuoi. Si desidera trovare i file PDF situati nelle sottodirectory. Btw .: Questo è anche il problema con il tuo command chown .

    Non è complicato.

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

    Ciò si applica a chown a tutti i file e tutte le sottodirectory e le sottodirectory della cartella specificata. Utilizzare con cura.

    Il command

     chown -R someuser:somegroup *.pdf 

    recupererà solo directory se il nome della directory finisce in .pdf. Hai bisogno di qualcosa di simile:

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

    per modificare la properties; di una directory ricorsivamente utilizzare semplicemente:

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

    qui username = il nuovo utente che dovrebbe essere proprietario della directory

    groupname = il nuovo gruppo che dovrebbe essere proprietario della directory

    each file / directory dispone di un proprietario utente e di un proprietario di un gruppo

    Siamo il genio del computer e della rete.