1

私はBASHが初めてで、このスクリプトをcronジョブで使用しています。最初は を使用してmvいましたが、一致するディレクトリなどとマージされないことがわかりました。cpそのため、マージして置き換えると思われるため、を使用するように勧められました。

/schedule/ = ソース ディレクトリ /public_html/ = ターゲット ディレクトリ

#!/bin/bash

[ignore dot files/hidden files when copying]
cp -a schedule/* public_html/
[empty contents of source directory(schedule/) after copying]

ソース: /schedule/(フォルダー/ファイルを含む)

/files/
--4.html
--5.html
/assets/
--sitemap.xml

宛先: /public_html/(前のフォルダーは既に存在します)

/files/
--1.html
--2.html
--3.html
/assets/
--sitemap.xml

cp最終的に、使用中に隠しファイルを無視し、コピー後にソースディレクトリを空にする方法を見つけようとしています。BASH のリファレンス マニュアルを読んで を見ましたがnullglob、それを使用する必要があるかどうかはわかりません。

誰かが例を提供したり、私を正しい方向に向けたりできますか?

4

3 に答える 3

0

GLOBIGNORE変数とdotglobオプションが設定されていないcp -a schedule/* public_html/場合、パス名展開は「.」で始まるファイル名を無視するため、コマンドを使用して、タスクの最初の部分 [コピー時にドット ファイルを無視する] を既に完了しています。これを確保します。unset GLOBIGNORE

2 番目の部分 [コピー後にソース ディレクトリを空にする] では、次のrmコマンドを追加します。

cp -a schedule/* public_html && rm -r schedule/*

また

cp -a schedule/* public_html && rm -r schedule/{,.[!.]}*

(ドットファイルも削除したい場合)。

于 2013-10-30T08:21:57.030 に答える
0

正規表現を使用してすべての隠しファイルとフォルダーをキャッチし、これを無効にすることができます!。次に、すべてのファイルを一覧表示しFILES、ファイルをコピーして削除できます。

FILES=$(find /PATH/TO/SOURCE/FOLDER \( ! -regex '.*/\..*' \) -type f ) 
for f in $FILES; 
do 
 cp /PATH/TO/SOURCE/FOLDER/$f /PATH/TO/DEST/FOLDER/$f;
 rm /PATH/TO/SOURCE/FOLDER/$f
done

あるいは、 andmvの代わりに使用することもできます。cprm

于 2016-01-21T13:08:11.453 に答える