"cd"를 사용하지 않고 디렉토리 변경 [닫기]

"cd"를 사용하지 않고 디렉토리 변경 [닫기]

경로가 텍스트 파일에 있는 파일 목록이 있습니다. 목록에 언급된 파일을 다른 디렉터리와 해당 상위 폴더 트리에 복사하고 싶습니다. 또한 이러한 파일을 복사하는 데 사용되는 셸 스크립트는 이 텍스트 파일과 동일한 디렉터리에 있습니다.

이제 이 텍스트 파일을 디렉터리에 넣었으며 텍스트 파일의 현재 디렉터리의 상위 폴더에서 텍스트 파일에 나열된 파일을 복사하려고 합니다.

파일 목록은 다음과 같습니다.

../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

cp --parents이제 파일과 해당 상위 디렉터리를 복사하고 필요한 경우 구조를 다시 만들 수 있다는 것을 알았습니다 . 하지만 디렉터리에서 파일을 찾는 대신 상위 폴더에서 파일을 가져오도록 명령에 전달하여 ../디렉터리를 어떻게 변경 합니까? cp현재 폴더?

답변1

../를 cp 명령에 전달하여 디렉토리를 변경하는 방법

내가 본 어떤 버전도 "디렉토리 변경" 매개변수를 전달할 수 없습니다( -C예를 들어 옵션과 유사). 이전에는 명령을 실행하기 전에 단순히 쉘 스크립트에서 실행하는 것을 제안했지만 이 역시 도움이 되지 않는 것으로 간주되었습니다.tarcpcdcp

답변2

내 가정은 다음과 같습니다.

원래 위치의 파일 구조:

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

파일 목록복사할 파일 목록이 포함된 파일의 이름입니다.스크립트 파일아래 스크립트입니다.

#! /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

첫 번째 줄에 올바른 경로를 제공했는지 확인하십시오.

관련 정보