cp: not stat './1_true/*': нет такого файла или каталога, когда вы находите каталоги и копируете файлы

У меня много таких каталогов:

$ ls 
  1_true 1_false 2_true 2_false 3_true 3_false ...

Я хочу скопировать файлы из «* _true /» в другой каталог.

Когда я запускаю команду, как показано ниже

find . -name "*_true" -exec cp "{}"/* "../out_true" ";"

, это выдает мне сообщения об ошибках вроде этого:

cp: cannot stat './1_true/*': No such file or directory
cp: cannot stat './2_true/*': No such file or directory
cp: cannot stat './3_true/*': No such file or directory
...

, как исправить эту ошибку? спасибо!

ПРИМЕЧАНИЕ. Количество моих «истинных» каталогов превышает 100000

.
2
задан 17 October 2019 в 11:19

3 ответа

Можно упростить его вполне немного

cp ?_true/* ../out_true/

будет работать также.

Это не будет, однако, работать, когда у Вас будет очень большое количество файлов.

2
ответ дан 2 December 2019 в 02:11

найденный ответ, с помощью xargs вместо -exec

find . -name "*_true" -print0 | xargs --null -I{} sh -c 'cp "$1"/* "../out_true"' -- {}
1
ответ дан 2 December 2019 в 02:11

Можно ограничить, находят для убывания не больше, чем n уровни с -maxdepth. Это будет соответствовать * _true и копировать содержание с помощью rsync. Запаздывающая наклонная черта на исходном каталоге изменит поведение rsync и только скопирует содержание каталога а не каталога это сам.

find -maxdepth 1 -type d -name '*_true' -exec rsync -a "{}/" ../out_true \;

или

for i in *_true; do
    rsync -a "$i/" ../out_true
done
1
ответ дан 2 December 2019 в 02:11

Другие вопросы по тегам:

Похожие вопросы: