스크립트는 파일을 다른 디렉터리로 이동해야 합니다. 상위 디렉터리 트리 없이는 이동할 수 없습니다.

스크립트는 파일을 다른 디렉터리로 이동해야 합니다. 상위 디렉터리 트리 없이는 이동할 수 없습니다.

Bash 스크립트에는 다음이 있습니다.

TEMPPATH="/tmp/directory"

BACKUPPATH="/backup/path"

다음을 사용하여 파일을 이동하려고 합니다.

mv $TEMPPATH/file $BACKUPPATH/file

/tmp/directory/file파일을 에서 로 이동하고 싶지만 . /backup/path/file으로 끝납니다 /backup/path/tmp/directory/file. 대상에서 후행 슬래시를 추가 및 제거하고 대상에서 파일 이름을 제외하려고 했습니다(대상 디렉터리만 사용). 디렉토리에 있는 많은 수의 파일을 이동하는 방법을 검색하고 여러 가지 방법을 찾았지만 하나만 이동하고 싶습니다.

========

편집: 이것은 문제를 일으키는 스크립트 부분입니다. 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

관련 정보