パスがテキストファイルにあるファイルのリストがあります。リストに記載されているファイルを別のディレクトリとその親フォルダツリーにコピーしたいと思います。また、これらのファイルをコピーするために使用されるシェルスクリプトは、このテキストファイルと同じディレクトリにあります。
このテキストファイルをディレクトリに配置し、テキストファイルの現在のディレクトリの親フォルダからテキストファイルにリストされているファイルをコピーしようとしています。
ファイルのリストは次のとおりです。
../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
たとえば、オプションと似ています)。以前は、コマンドを実行する前に単にシェルスクリプトで実行することを提案していましたが、これも役に立たないと考えられていました。tar
cp
cd
cp
答え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
最初の行に正しいパスが指定されていることを確認してください。