2017-02-20 33 views
0

Мне нужно скопировать все файлы с расширением .sh .cpp .c в каталог на моем рабочем столе и переименовать файлы с тем же именем. Если у меня есть два файла с именем hello.cpp, измените имя на hello1.cpp.найти все файлы с расширением .sh .cpp .c и скопировать их в каталог на моем рабочем столе, если есть файл с тем же именем, переименуйте его

Я уже попытался это:

find /root \ (-name *.cpp -o -name *.sh \) -exec cp {} /root/Desktop/myNewDir \; 

, но я получаю эту ошибку:

cp: '/root/Desktop/mynewDir/hello.cpp' and '/root/Desktop/myNewDir/hello.cpp' are the same file 
+0

Почему ты помещая там parens, и почему вы не избегаете одного из них должным образом? –

+0

Ошибка говорит вам, что вы копируете файлы по себе. – choroba

ответ

1

Это происходит потому, что вы обход рекурсивно /root и find -ный тот же файл, чтобы скопировать Это.

Если вы хотите придерживаться рекурсии, то -prune/root/Desktop/myNewDir/ из find «s рекурсии:

find /root/ -type d -name /root/Desktop/myNewDir/ -prune -o -type f \ 
    \(-name '*.cpp' -o -name '*.sh' \) -exec cp --backup=numbered 
     -t /root/Desktop/myNewDir/ {} + 

Если вы не хотите рекурсию, это становится очень легко:

find /root/ -maxdepth 1 -type f \(-name '*.cpp' -o -name '*.sh' \) \ 
    -exec cp -t /root/Desktop/myNewDir/ {} + 

 Смежные вопросы

  • Нет связанных вопросов^_^