L' -execargomento da trovare esegue semplicemente quel comando su ogni elemento restituito. Quindi, ad esempio, se hai una directory impostata come:
>$ find .
.
./a.txt
./b.txt
./dir1
./dir1/c.txt
./dir2
./dir2/d.txt
La -execparte verrà eseguita una volta per ogni riga, sostituendo il testo per {}. Quindi, nel tuo caso, copierebbe ricorsivamente ogni voce nella directory specificata.
cp -ruv a.txt /run/media/user/32GB/prog/
cp -ruv b.txt /run/media/user/32GB/prog/
cp -ruv dir1 /run/media/user/32GB/prog/
cp -ruv dir1/c.txt /run/media/user/32GB/prog/
etc, etc
Per inciso, anche segnare -not -executable. Questo fa la vera differenza. Le directory in Linux sono eseguibili. (Il bit di esecuzione nelle directory gestisce le autorizzazioni per elencare il contenuto della directory, poiché le cartelle non possono essere eseguite.)
>$ ls -l
-rw-rw-r--. 1 user user 1583 Feb 10 13:14 a.txt
-rw-rw-r--. 1 user user 1583 Feb 10 13:14 b.txt
drwxr-xr-x. 2 user user 4096 Nov 22 2013 dir1
drwxr-xr-x. 2 user user 4096 Nov 22 2013 dir2
Così,
>$ find . -not -executable
a.txt
b.txt
dir1/c.txt
dir2/d.txt
Non restituirà alcuna directory, solo un elenco di file non eseguibili ( -type f). E, come è stato detto, cpcopia ognuno di essi, singolarmente (poiché solo le directory possono essere copiate in modo ricorsivo) in/run/media/user/32GB/prog/
Una potenziale soluzione è copiare prima tutto, quindi fare un find/rm
>$ cp -ruv . /run/media/user/32GB/prog/
>$ find /run/media/user/32GB/prog -executable -type f -exec rm {} \;
O un cattivo rsync(adoro rsync):
>$ find . -type f -not -executable > /tmp/filelist
>$ rsync -r --include-from=/tmp/filelist . /run/media/user/32GB/prog/
rsync copierà ricorsivamente la directory corrente, aggiungendo solo i file specificati - quelli non exec. Ciò impedirà la scrittura / eliminazione aggiuntiva.