2013-03-18 5 views
0

Я пытаюсь написать сценарий, который копирует файлы из одного каталога в другой и добавляет к ним расширение .bak. Мне сложно понять, как добавить расширение.UNIX C Shell Scripting. Копирование файлов и добавление расширения

foreach file in ($argv[1]/*) 
    cp $file $argv[2] 
end 
+0

Первое правило сценария оболочки C: «Использовать другую оболочку -' bash' или 'ksh' или plain' sh'. –

ответ

1

Making кучу предположений (главным образом, что контур вашего сценария является допустимым синтаксисом C оболочки, и пространств в файле название не проблема), то вам, вероятно, нужно использовать команду: basename

foreach file in ($argv[1]/*) 
    cp $file $argv[2]/`basename $file`.bak 
end 

команда basename удаляет путь к файлу, так что файлы будут Копы точно в каталог, названный $argv[2]. Если вы также хотите сохранить иерархии каталогов, вам придется работать более честно.

+0

Спасибо! Теперь он отлично работает. – user2125899

0

$ 1 и $ 2 являются аргументы (каталоги) к script-:

for f in $1/* 
do 
    fname=$(basename $f) 
    cp $f $2/$fname.bak 
done 
+0

К сожалению, это не работает. echo $ f -> directory/filename. Поэтому, когда я пытаюсь ввести то, что в нем вызывает ошибку. – user2125899

+0

Вы используете абсолютные или относительные пути для $ 1 и $ 2? – suspectus

+0

относительные пути. Проблема заключается в переменной $ f, содержащей не только имя файла, но и относительную директорию. – user2125899

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