C Shell Scripting - добавление в конец имени файла

Итак, я беру несколько файлов и хочу скопировать их в каталог и сохранить с добавленным расширением файла, скажем, «.copy».

Я не совсем уверен, какую команду я могу использовать, чтобы добавить что-то в конец файла, это проще, чем я думаю, или мне нужна команда?


person muttley91    schedule 10.02.2011    source источник


Ответы (2)


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

person Jeremiah Willcock    schedule 10.02.2011
comment
планируя цикл, как бы я использовал это для фактического копирования файлов? - person muttley91; 10.02.2011
comment
cp $f dir/$f.copy. Тем не менее, см. Ответ T.Rob для однострочной версии с использованием xargs. - person Jeremiah Willcock; 10.02.2011

fteadmin@linux-wmq-ams:~/files> ls -1
file1.txt
file2.txt
file3.txt
fteadmin@linux-wmq-ams:~/files> ls -1 | xargs -I{} cp {} {}.copy
fteadmin@linux-wmq-ams:~/files> ls -1
file1.txt
file1.txt.copy
file2.txt
file2.txt.copy
file3.txt
file3.txt.copy

В зависимости от вашей платформы вам может потребоваться немного изменить синтаксис для xargs. Я видел, что он использует -i{} и -I{}, но вариант с заглавными буквами кажется более распространенным. Конечно, вы можете указать полное имя пути перед именем файла {}.copy, чтобы файлы оказались в другом каталоге.

Если вам нужно сделать немного больше, чем однострочный, есть также это:

ls -1 | {
    while read _file; do
        echo Copying $_file to $_file.copy
        cp $_file $_file.copy
    done
}

Вы можете поместить любое количество строк в цикл while. Например, вы можете скопировать один и тот же файл в дюжину разных целевых каталогов или суффиксов. Если вы просто вставляете его, вам не нужно делать из него сценарий. Результат выглядит следующим образом:

fteadmin@linux-wmq-ams:~/files> ls -1
file1.txt
file2.txt
file3.txt
fteadmin@linux-wmq-ams:~/files> ls -1 | {
>     while read _file; do
>         echo Copying $_file to $_file.copy
>         cp $_file $_file.copy
>     done
> }
Copying file1.txt to file1.txt.copy
Copying file2.txt to file2.txt.copy
Copying file3.txt to file3.txt.copy
fteadmin@linux-wmq-ams:~/files> ls -1
file1.txt
file1.txt.copy
file2.txt
file2.txt.copy
file3.txt
file3.txt.copy
fteadmin@linux-wmq-ams:~/files> 
person T.Rob    schedule 10.02.2011