スクリプトはファイルを別のディレクトリに移動する必要があります。親ディレクトリツリーなしでは移動できません。

スクリプトはファイルを別のディレクトリに移動する必要があります。親ディレクトリツリーなしでは移動できません。

Bashスクリプトには次のものがあります。

TEMPPATH="/tmp/directory"

BACKUPPATH="/backup/path"

次のようにファイルを移動しようとします。

mv $TEMPPATH/file $BACKUPPATH/file

/tmp/directory/fileファイルをからに移動したいが。/backup/path/fileで終わります/backup/path/tmp/directory/file。ターゲットから末尾のスラッシュを追加および削除し、ターゲットからファイル名を除外しようとしました(ターゲットディレクトリのみを使用)。ディレクトリ内の多数のファイルを移動する方法を検索し、いくつかの方法を見つけましたが、1つだけ移動したいと思います。

========

編集:これは問題を引き起こすスクリプトの一部です。 WordPressフォルダとデータベースをバックアップするスクリプトの一部です。注:ファイルをバックアップの場所に直接圧縮しない理由がわからない場合は、Keybaseに書き込むためです。まだKeybaseを使用していない場合は、I / O速度が非常に遅いので、ローカルでファイルを圧縮してから、圧縮が完了したらファイルを移動することを目的としています。

#back up the WordPress folder and move over to backup location
echo Compressing site files
zip -r --quiet $TEMPPATH/$DATEFORM-$SITE.wp-content.zip .
echo Moving site zip file to Keybase
#mv $TEMPPATH/$DATEFORM-$SITE.wp-content.zip $BACKUPPATH/$SITE/$DATEFORM-$SITE.wp-content.zip
# ---------> this mv command works as expected:
mv $TEMPPATH/$DATEFORM-$SITE.wp-content.zip $BACKUPPATH/$SITE

#back up the WordPress database, compress, move to backup location and clean up
echo Exporting database
/usr/local/bin/wp db export $TEMPPATH/$DATEFORM-$SITE.sql --all-tablespaces --single-transaction --quick --lock-tables=false --allow-root --skip-themes --skip-plugins
echo Compressing database
zip --quiet $TEMPPATH/$DATEFORM-$SITE.sql.zip $TEMPPATH/$DATEFORM-$SITE.sql
# ---------> this is the way the script was originally written -- maybe this cat method was used to prevent the same problem I am having?
# cat $TEMPPATH/$DATEFORM-$SITE.sql | zip > $TEMPPATH/$DATEFORM-$SITE.sql.zip
echo Moving sql zip file to Keybase
# ---------> this is the mv command that results in the directory tree being copied over to the destination
mv $TEMPPATH/$DATEFORM-$SITE.sql.zip $BACKUPPATH/$SITE
echo Removing tmp file
rm $TEMPPATH/$DATEFORM-$SITE.sql

ベストアンサー1

あなたの例を試しましたが、期待どおりに動作します。以下の出力を参照してください。mvどのバージョンを使用しており、どのシステムで使用していますか?もう一つのアドバイスは、予期しないことをする特殊文字(スペースのある名前など)を避けるために変数を引用してターゲットからファイル名を削除できることですmv "$TEMPPATH/file" "$BACKUPPATH/"

質問の例:

$ tree /tmp/directory
/tmp/directory
└── file

0 directories, 1 file
$ tree /backup
/backup
└── path

1 directory, 0 files
$ TEMPPATH="/tmp/directory"
$ BACKUPPATH="/backup/path"
$ mv $TEMPPATH/file $BACKUPPATH/file
$ tree /tmp/directory
/tmp/directory

0 directories, 0 files
$ tree /backup
/backup
└── path
    └── file

1 directory, 1 file

まだ再現できません:

$ tree /tmp/test /backup/
/tmp/test
└── some-example.sql
/backup/
└── path

1 directory, 1 file
$ TEMPPATH=/tmp/test
$ DATEFORM=some
$ SITE=example
$ BACKUPPATH=/backup/path
$ zip --quiet $TEMPPATH/$DATEFORM-$SITE.sql.zip $TEMPPATH/$DATEFORM-$SITE.sql
$ mv $TEMPPATH/$DATEFORM-$SITE.sql.zip $BACKUPPATH/$SITE
$ tree /tmp/test /backup/
/tmp/test
└── some-example.sql
/backup/
└── path
    └── example

1 directory, 2 files

おすすめ記事