linux рекурсивно переименовывает имена файлов

Мне нужно рекурсивно переименовать bash-sdl2-compile.sh в compile.sh
Попытки использовать 'rename' терпят неудачу, очевидно, функция безопасности не позволяет слово «баш», т.е.

find ./ -name "bash-sdl2-compile.sh" -print0 | xargs -0 rename "bash-sdl2-compile.sh" "bash-sdl2-compile/compile"

сообщение об ошибке: голое слово bash не разрешено, пока используются строгие субтитры в (код, предоставленный пользователем). xargs: переименовать: завершено со статусом 255; прерывание

Как я могу рекурсивно переименовать файлы Linux?

    dir1
       |_project1
                |_ bash-sdl2-compile.sh
    dir2
       |_project2
                |_ bash-sdl2-compile.sh
    dir3
       |_project3
                |_ bash-sdl2-compile.sh
  . . . 

Итак, переименуйте каждый bash-sdl2-compile.sh в просто compile.sh


person jwzumwalt    schedule 03.08.2020    source источник
comment
Похоже, что все файлы будут иметь только одно имя, не так ли?   -  person Jetchisel    schedule 03.08.2020
comment
Не могли бы вы привести образец вашего каталога до и после переезда, пожалуйста?   -  person xhienne    schedule 03.08.2020
comment
У меня есть 20 подкаталогов, в каждом из которых есть файл с именем bash-sdl2-compile.sh, и мне нужно изменить его на compile.sh Код, который я показываю, был опубликован на Стек-сервер   -  person jwzumwalt    schedule 03.08.2020
comment
@jwzumwalt: Ваше сообщение об ошибке выглядит так, как будто оно было выдано программой Perl. Помимо этого, у вас нет голого слова bash в опубликованном вами коде.   -  person user1934428    schedule 03.08.2020


Ответы (1)


Не нужно использовать xargs, достаточно find:

find . -name bash-sdl2-compile.sh -execdir mv -i {} compile.sh ";"

(сделайте резервную копию всего вашего дерева, прежде чем пытаться это сделать)

person xhienne    schedule 03.08.2020
comment
Это не работает, есть ошибки, найти . -name bash-sdl2-compile.sh -execdir mv {} bash-sdl2-compile/compile ; вывод: mv: невозможно переместить './bash-sdl2-compile.sh' в 'bash-sdl2-compile /compile': Нет такого файла или каталога - person jwzumwalt; 03.08.2020
comment
Если вы действительно хотите поместить все файлы bash-sdl2-compile.sh в один каталог, перезаписав таким образом все файлы последним найденным, замените -execdir на -exec. Я не уверен, что это действительно то, что вы хотите (отсюда и мой ответ), и вы должны сначала сделать резервную копию своих файлов. - person xhienne; 03.08.2020
comment
Я пытаюсь рекурсивно перемещаться по каталогам, находить файл1 и переименовывать его в файл2 в исходных каталогах. - person jwzumwalt; 03.08.2020
comment
Пожалуйста, измените свой вопрос и объясните, что вы хотите. Особенно: что такое файл2? Это bash-sdl2-компилировать/компилировать? Или bash-sdl2-compile/compile/bash-sdl2-compile.sh? Или что-то другое? Не просто отвечайте мне, пожалуйста, отредактируйте свой вопрос, чтобы он был понятен для всех. - person xhienne; 03.08.2020