2011-05-21 3 views
2

Я получаю эту ошибку:находка: пути должны предшествовать выражение

«найти: пути должны предшествовать выражение:

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

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

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

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

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

+0

возможно дубликат [переименование расширения файла без указания] (http://stackoverflow.com/questions/6068733/renaming-a-file-extension-without-specifying) – Johnsyweb

ответ

1

"*[email protected]" наверняка не делает, что вы хотите. Создайте команду in an array.

+0

Я думал, я должен просто назвать его как «$ @»? Я прочитал, что вы связали меня. Благодарю. –

+0

Нет. Вам все еще нужны несколько предикатов '-name' (и' -o', если вы хотите, чтобы он работал правильно). –

2

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

for old_extension in "[email protected]" 
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 
  • Выход команды поиска считывается время цикла, одна строка в то время, каждая строка присваивается переменной $ old_file
  • $ {old_file% $ old_extension} конструирует удаляет расширение, затем добавляется новое расширение 'new' в $ new_file
  • Строка echo mv ... будет выводиться на экран для визуальной проверки
  • Как только вы довольный результатом, вы можете удалить эхо и снова запустить скрипт, чтобы действительно нанести урон. Помните: проверьте результат перед удалением эха.
  • Обратите внимание, что я протестировал свое решение против файлов с и без встроенных пространств.
+1

Да, оригинальный код ужасен по разным причинам. Но вы совершенно не заметили, что команда 'find' не работает *. –

+0

@Ignacio: Я отредактировал код, чтобы принять во внимание несколько расширений. Теперь команда find должна работать, чтобы г-н Тит установил значение для переменной * file *. –

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