Altera o diretório sem usar 'cd' [closed]

2

Eu tenho uma lista de arquivos com seus caminhos em um arquivo de texto. E eu quero copiar esses arquivos, mencionados na lista, para outro diretório com sua árvore de pastas pai. Além disso, meu shell-script para copiar esses arquivos está no mesmo diretório que este arquivo de texto.

Agora eu coloquei este arquivo de texto dentro de um diretório e eu quero copiar arquivos conforme listado no arquivo de texto da pasta pai do diretório atual do arquivo de texto.

Lista de arquivos é como abaixo:

../app/code/community/Company/Module/Block/Adminhtml/Location.php
../app/code/community/Company/Module/Block/Adminhtml/Location/Edit.php
../app/code/community/Company/Module/Block/Adminhtml/Location/Grid.php
../app/code/community/Company/Module/Block/Adminhtml/Location/Import.php
../app/code/community/Company/Module/Block/Adminhtml/Location/Edit/Form.php
../app/code/community/Company/Module/Block/Adminhtml/Location/Edit/Import.php
../app/code/community/Company/Module/Block/Adminhtml/Location/Edit/Tabs.php
../app/code/community/Company/Module/Block/Adminhtml/Location/Edit/Tab/Form.php
../app/code/community/Company/Module/Block/Adminhtml/Location/Edit/Tab/Import.php
../app/code/community/Company/Module/controllers/IndexController.php
../app/code/community/Company/Module/controllers/LocationController.php
../app/code/community/Company/Module/controllers/Adminhtml/LocationController.php
../app/code/community/Company/Module/etc/adminhtml.xml
../app/code/community/Company/Module/etc/config.xml
../app/code/community/Company/Module/etc/system.xml
../app/code/community/Company/Module/Helper/Data.php
../app/code/community/Company/Module/sql/pmodule_setup/mysql4-install-0.1.0.php
../app/code/community/Company/Module/Model/Defaultcountry.php
../app/code/community/Company/Module/Model/Location.php
../app/code/community/Company/Module/Model/Observer.php
../app/code/community/Company/Module/Model/System/Config/Source/Radiuses.php
../app/code/community/Company/Module/Model/System/Config/Source/RadiusUnits.php
../app/code/community/Company/Module/Model/Mysql4/Location.php
../app/code/community/Company/Module/Model/Mysql4/Location/Collection.php
../app/code/community/Company/Module/Model/Adminhtml/System/Config/Source/Radiuses.php
../app/code/community/Company/Module/Model/Adminhtml/System/Config/Source/RadiusUnits.php
../app/design/adminhtml/default/default/layout/pmodule.xml
../app/design/frontend/default/default/layout/pmodule.xml
../app/design/frontend/default/default/template/company/module/gmap.phtml
../app/etc/modules/Company_Module.xml
../app/locale/de_DE/Company_Module.csv
../app/locale/en_US/Company_Module.csv
../app/locale/fr_FR/Company_Module.csv
../skin/frontend/default/default/module/css/module.css
../skin/frontend/default/default/module/js/jquery-1.8.3.min.js
../skin/frontend/default/default/module/js/module.js
../skin/frontend/default/default/module/js/module_bak_20-05-2016.js
../skin/frontend/default/default/module/js/module_bak_21052016.js

Agora eu sei que cp --parents pode copiar o arquivo junto com seus diretórios pai e recriar a estrutura se necessário, mas como posso alterar o diretório apenas passando ../ para o comando cp , para que ele seja capturado arquivo da pasta pai e não procurá-lo na pasta atual?

    
por Vicky Dev 27.05.2016 / 05:27

2 respostas

-1

how can I change directory just by passing ../ to the cp command

Você não pode passar um argumento "alterar diretório" (comparável à opção -C de tar , por exemplo) para qualquer versão de cp que eu já vi. Anteriormente, sugeri que fizéssemos um cd no script de shell antes de emitir o comando cp , mas isso também foi considerado inútil.

    
por 27.05.2016 / 11:54
-1

Estas são minhas suposições:

Estrutura do arquivo no local original:

..
├── app
│   ├── code
│   ├── design
│   ├── etc
│   └── locale
│   └── ...
├── script.d
│   ├── file.list
│   ├── script.sh
└── skin
    └── frontend
    └── ...

file.list é o nome do arquivo que contém a lista de arquivos a serem copiados. script.sh é o seguinte script.

#! /bin/bash

distDir="THE NEW DIRECTORY PATH" # <<<<<< Alter this line

for filePath in $(cat "file.list");
do
    len=$(wc -c "$filePath")
    newFilePath=$(cut -c4-$len "$filePath")

    tempFileName=$(grep -Po '[^/]+$' "$filePath")

    path=$(grep -Po '^.*/' "$newFilePath")

    newPath=$distDir

    for dir in $(echo "$path" | tr / '\n');
    do

        if [ $(ls "$newPath" | grep -P '^'$dir'$' | wc -l) = 0 ]
        then
            mkdir "$newPath"'/'"$dir"
            newPath="$newPath"'/'"$dir"
        fi

    done

    cp "$filePath" "$newPath"'/'
done

Apenas certifique-se de fornecer o caminho correto na primeira linha.

    
por 27.05.2016 / 13:09