Rekurencyjna Kopia konkretnych plików w Unix/Linux? [zamknięte]

Zamknięte. to pytanie jest off-topic . Obecnie nie przyjmuje odpowiedzi.


Chcesz poprawić to pytanie? Update the question so to on-topic dla przepełnienia stosu.

Zamknięte 8 lat temu .

Popraw to pytanie

Muszę skopiować wszystkie *.jar pliki z katalogu i jego podkatalogów. Jak mogę to zrobić w terminalu UNIX/Linux? Polecenie cp -r *.jar /destination_dir nie działa.

Author: Pavan Manjunath, 2012-03-08

7 answers

rsync jest przydatny do lokalnego kopiowania plików, jak również między maszynami. To zrobi co chcesz:

rsync -avm --include='*.jar' -f 'hide,! */' . /destination_dir

Cała struktura katalogów z . jest kopiowany do /destination_dir, ale tylko do .pliki jar są kopiowane. Opcja-a zapewnia, że wszystkie uprawnienia i czasy na plikach są niezmienione. Opcja-m pomija puste katalogi. - v jest dla verbose output.

Na sucho Dodaj a-n, powie Ci, co zrobi, ale nie skopiuje niczego.

 100
Author: Sean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 23:20:14

Jeśli nie potrzebujesz struktury katalogów tylko plików jar, możesz użyć:

shopt -s globstar
cp **/*.jar destination_dir

Jeśli chcesz mieć strukturę katalogów, możesz zaznaczyć opcję cp's --parents.

 37
Author: uzsolt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-30 23:30:52

Jeśli Twoje znalezisko ma przełącznik-exec i opcję-t:

find . -name "*.jar" -exec cp -t /destination_dir {} +

Jeśli nie znajdziesz " + " dla wywołania równoległego, możesz użyć ";", ale możesz pominąć -t:

find . -name "*.jar" -exec cp {} /destination_dir ";"
 18
Author: user unknown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 20:08:57
cp --parents `find -name \*.jar` destination/

From man cp:

--parents
       use full source file name under DIRECTORY
 6
Author: Bartosz Moczulski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 19:16:17
tar -cf - `find . -name "*.jar" -print` | ( cd /destination_dir && tar xBf - )
 4
Author: Pavan Manjunath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 19:04:23

Jeśli chcesz zachować tę samą hierarchię katalogów pod miejscem docelowym, możesz użyć

(cd SOURCE && find . -type f -name \*.jar -exec tar cf - {} +) \
  | (cd DESTINATION && tar xf -)

Ten sposób działania, zamiast rozszerzać wyjście find W back-tickach, ma tę zaletę, że jest w stanie obsłużyć dowolną liczbę plików.

 3
Author: Idelic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 19:43:31
find . -name \*.jar | xargs cp -t /destination_dir

Zakładając, że nazwy plików jar nie zawierają spacji, a cp ma opcję "- t". If cp can ' t do "-t"

find . -name \*.jar | xargs -I FILE cp FILE /destination_dir
 2
Author: glenn jackman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 18:43:19