「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

最初の行に正しいパスが指定されていることを確認してください。

関連情報