Come scansionare una cartella per le sottocartelle e copiare un file su ogni uscita

2

Sto avendo un piccolo problema qui. Ecco la situazione: distribuiremo presto una nuova applicazione e la configurazione del server risiede in un semplice file XML, situato in qualche parte nel profondo del ~/library/Preferences . Voglio creare uno script bash / shell che copi fondamentalmente il file XML nel posto giusto, ma per ogni cartella utente esistente.

Sono stato in grado di utilizzare lo script seguente per Windows, ma mi chiedo se c'è qualcosa di simile per Apple.

Ecco lo script di Windows:

$sourceLocation = "C:\Users\suptech\Downloads\TEMP"

$targetLocation = "C:\Users"

$result = @()

$result += get-ChildItem $targetLocation | Where-Object {$_.PSIsContainer}  
$result | foreach-Object { copy-item $sourceLocation -Destination "C:\Users\$_\AppData\Roaming\TEST” -Recurse -Force}

Qualcuno potrebbe aiutarmi?

Grazie in anticipo! :)

    
posta Alex Pilon 22.08.2016 - 23:00
fonte

2 risposte

3

Bene, ecco qualcosa su cui puoi lavorare. Non è testato in un ambiente reale e viene offerto COSÌ COM'È- senza alcuna garanzia.

# This script must run as root
if [ "$(id -u)" != "0" ]
then
    echo "This script must be run as root"
    exit 1
fi

source=/path/to/file
destination=Library/path/to/destination/directory

for u in /Users/*
do
    on=${u##*/}

    # If not a directory- do not process
    [ ! -d "$u" ] && continue

    # Check that the directory has a valid user name or do not process
    id "$on" >/dev/null 2>&1 || continue

    # Get the user's primary group id
    gn=$(id -gn "$on")

    # bug fix found by Alex Pilon
    # make destination directory if it doesn't exist
    install -o "$on" -g "$gn" -d "${u}/${destination}"

    install -b -o "$on" -g "$gn" -m 644 "$source" "${u}/${destination}"
done

Un'altra soluzione basata sul suggerimento di bmike

# This script must run as root
if [ "$(id -u)" = "0" ]
then
    : running as root
else
    echo "This script must be run as root"
    exit 1
fi

source=/path/to/file
destination=Library/path/to/destination/directory 

dscl . -list /Users NFSHomeDirectory |
awk 'BEGIN { OFS=":" } / \/Users/ { print $1, $2 }' |
while IFS=: read u hdir
do
    # Get the user's primary group id
    gn=$(id -gn "$u")

    install -o "$u" -g "$gn" -d "${hdir}/${destination}"    

    install -b -o "$u" -g "$gn" -m 644 "$source" "${hdir}/${destination}"
done
    
risposta data 23.08.2016 - 19:08
fonte

Leggi altre domande sui tag