find: пути должны предшествовать выражению - PullRequest
2 голосов
/ 21 мая 2011

Я получаю эту ошибку:

"find: пути должны предшествовать выражению

Использование: найти [-H] [-L] [-P] [путь ...] [выражение] "

Для этого кода я произвел:

for subdir in `find ./$file/ -name "*.$@"`
do
new_ext=`echo $subdir | sed "s/\(.*\.\)$/\1$new/"`
mv $subfile $new_ext
done

То, что я пытаюсь сделать с помощью приведенного выше кода, это переименовать расширения файлов в текущем и подкаталогах без необходимости ввода старого расширения файла.

Любая помощь, указывающая на то, что я делаю неправильно, была бы благодарна.

Ответы [ 2 ]

2 голосов
/ 22 мая 2011

Вот моя попытка:

for old_extension in "$@"
do  
    find ./$file -name "*.$old_extension" | while read old_file
    do
        new_file=${old_file%$old_extension}new
        echo mv "$old_file" "$new_file"
    done
done
  • Вывод команды find читается циклом while, по одной строке за раз, каждая строка присваивается переменной $ old_file
  • Конструкция $ {old_file% $ old_extension} удаляет расширение, затем новое расширение 'new' добавляется к $ new_file
  • Строка echo mv ... выведет на экран для визуальной проверки
  • Как только вы довольны результатом, вы можете убрать эхо и снова запустить скрипт, чтобы действительно нанести ущерб. Помните: пожалуйста, проверьте результат перед удалением эха.
  • Обратите внимание, что я проверил свое решение для файлов со встроенными пробелами и без них.
1 голос
/ 21 мая 2011

"*.$@" конечно, не делает то, что вы хотите. Постройте команду в массиве .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...