여기에 질문을 나열했습니다.2019년 10월 업그레이드: pip 업그레이드 실패 · 문제 #5844 · msys2/MINGW-packages:기본적으로 pip
MSYS2에서는 일부 파일이 보인다는 이유로 업데이트를 거부하고 있습니다. pacman -Syu
기본적으로 이것을 덤프하십시오.
...
:: Proceed with installation? [Y/n] y
:: Retrieving packages...
mingw-w64-x86_64-gl... 4.6 MiB 4.97M/s 00:01 [#####################] 100%
mingw-w64-x86_64-gn... 1942.9 KiB 1045K/s 00:02 [#####################] 100%
(18/18) checking keys in keyring [#####################] 100%
(18/18) checking package integrity [#####################] 100%
(18/18) loading package files [#####################] 100%
(18/18) checking for file conflicts [#####################] 100%
error: failed to commit transaction (conflicting files)
python2-pip: /c/msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.py exists in filesystem
python2-pip: /c/msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc exists in filesystem
...
pip를 제거하고 싶지 않은데 (팩맨 "파일 시스템에 존재합니다" 오류) 파일을 다른 곳으로 "그냥" 이동하고 업데이트를 실행할 수 있습니다. 물론 이동되는 파일의 원래 파일 위치를 보존하고 싶습니다.
tar
그래서 저는 이러한 파일을 아카이브에 저장한 다음( --remove-files
원래 파일도 삭제하여 다시 업데이트되지 않도록 함) 업데이트 후에 복원 할 수 있을 것이라고 생각했습니다. 이미 설치되어 있는 다른 패키지가 필요한 경우입니다.
tar
불행하게도 루프 의 파일로 아카이브를 업데이트 하는 올바른 호출을 실제로 찾을 수 없습니다 while
(즉, 공백으로 구분된 "한 줄"의 파일 목록이 없습니다).
그러면 아카이브에 파일이 하나만 생성됩니다.
$ pacman -Syu | grep exists | awk '{print $2}' | while read f; do tar -czf /tmp/bckp.tar "$f"; done
:: Proceed with installation? [Y/n] y
error: failed to commit transaction (conflicting files)
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
...
$ tar tzvf /tmp/bckp.tar
-rw-r--r-- user/None 13854 2019-09-02 09:07 c/msys64/usr/lib/python3.7/site-packages/pip/_vendor/urllib3/packages/rfc3986/validators.py
이것은 심지어 실행되지 않습니다:
$ pacman -Syu | grep exists | awk '{print $2}' | while read f; do tar -czvf --strip-components=1 --append /tmp/bckp.tar.gz "$f"; done
:: Proceed with installation? [Y/n] y
error: failed to commit transaction (conflicting files)
tar: You may not specify more than one '-Acdtrux', '--delete' or '--test-label' option
Try 'tar --help' or 'tar --usage' for more information.
tar: You may not specify more than one '-Acdtrux', '--delete' or '--test-label' option
Try 'tar --help' or 'tar --usage' for more information.
...
이것도 마찬가지입니다:
$ pacman -Syu | grep exists | awk '{print $2}' | while read f; do tar -zvf --strip-components=1 --append /tmp/bckp.tar.gz "$f"; done
:: Proceed with installation? [Y/n] y
error: failed to commit transaction (conflicting files)
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.
...
그러면 기존 파일에 대해 "해당 파일이나 디렉터리가 없습니다"라는 메시지가 표시됩니다.
$ pacman -Syu | grep exists | awk '{print $2}' | while read f; do tar -vf --strip-components=1 --append /tmp/bckp.tar.gz "$f"; done
:: Proceed with installation? [Y/n] y
error: failed to commit transaction (conflicting files)
tar: Removing leading `/' from member names
tar: /tmp/bckp.tar.gz: Cannot stat: No such file or directory
/c/msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.py
tar: Removing leading `/' from hard link targets
tar: Exiting with failure status due to previous errors
tar: Removing leading `/' from member names
tar: /tmp/bckp.tar.gz: Cannot stat: No such file or directory
/c/msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc
...
/c/msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc
따라서 다음 형식의 루프에 파일 목록(절대 파일 경로)이 있다고 가정해 보겠습니다. 절대 경로의 첫 번째 부분이 제거된 상태로 아카이브에 들어가도록 while
파일을 모두 아카이브에 추가하려면 어떻게 해야 합니까 (예: .tar
언급된 파일이 종료됩니다 tar
. )로 보관됩니까 msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc
?
답변1
좋아, 마침내 올바른 호출을 찾은 것 같습니다. 추가는 추출에 적용되기 sed
때문입니다.--strip-components
오직;여기서는 /c/
파일 경로 문자열에서 수동으로 제거한 다음 tar
변경 디렉터리에 스위치를 /c/
사용 하도록 지시합니다.-C
$ pacman -Syu | grep exists | awk '{print $2}' | sed 's_/c/__' | xargs tar -cvf /tmp/bckp.tar -C /c/
:: Proceed with installation? [Y/n] y
error: failed to commit transaction (conflicting files)
msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.py
msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc
msys64/usr/lib/python2.7/site-packages/pip/_internal/distributions/__init__.py
msys64/usr/lib/python2.7/site-packages/pip/_internal/distributions/__init__.pyc
...
...그리고 다시 확인해 보세요.
$ tar tvf /tmp/bckp.tar
-rw-r--r-- user/None 3360 2019-09-02 09:08 msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.py
-rw-r--r-- user/None 4154 2019-09-02 09:08 msys64/usr/lib/python2.7/site-packages/pip/_internal/commands/debug.pyc
-rw-r--r-- user/None 861 2019-09-02 09:08 msys64/usr/lib/python2.7/site-packages/pip/_internal/distributions/__init__.py
-rw-r--r-- user/None 986 2019-09-02 09:08 msys64/usr/lib/python2.7/site-packages/pip/_internal/distributions/__init__.pyc
...