![mv: 'filename'을 계산할 수 없습니다. 해당 파일이나 디렉터리가 없습니다](https://linux55.com/image/198177/mv%3A%20'filename'%EC%9D%84%20%EA%B3%84%EC%82%B0%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%20%ED%95%B4%EB%8B%B9%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%EB%82%98%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EA%B0%80%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.png)
나는 다음을 사용하고 있습니다
sudo docker exec -w /home/Docker1 Docker_1 ls -S | cat -n | while read n f; do mv -n "$f" "$n.txt"; done
이 명령은 docker 컨테이너 내에서(alpine 사용) 정렬/이름 바꾸기 명령을 실행하지만 다음 오류와 함께 실패합니다.
mv: 'filename'을 계산할 수 없습니다. 해당 파일이나 디렉터리가 없습니다."
왜 이런 일이 발생하는지 논리적인 이유가 없나요?
답변1
이 파이프라인은 docker에서 실행되지 않습니다.
sudo docker exec -w /home/Docker1 Docker_1 ls -S # Runs "docker" as root and then calls "ls -S" in Docker's context
cat -n # Runs in your local user's context (not root, not docker)
while read n f; do mv -n "$f" "$n.txt"; done # Also in your local user's context
Docker 컨테이너 내부의 파일 이름을 바꾸시겠습니까? 그럴 수도 있습니다(하지만 테스트할 수는 없습니다). 편안함을 느낄 때 제거하면 echo
원하는 대로 작동합니다.
sudo docker exec -w /home/Docker1 Docker_1 sh -c '
n=1; ls -S | while IFS= read -r f; do echo mv -f "$f" "$n.txt"; n=$((n+1)); done
'