두 개의 디렉토리가 있습니다.
/routea/path/to/dir1
/routeb/path/to/dir2
몇 가지 파일이 있습니다 dir1
.
file.name
file.name.1
file.name.2
file.name.3
(4개 이상의 파일이 있을 수 있습니다.) 1-3으로 끝나는 파일을 다음으로 이동해야 합니다.dir2
나는 시도했습니다(이것이 분명한 단계라고 생각합니다).
mv /routea/path/to/dir1/file.name.* /routeb/path/to/dir2/
하지만 그건 나에게만 말해주는 거야
mv: cannot stat `/routea/path/to/dir1/file.name.*': No such file or directory
상황을 복잡하게 만들기 위해 이상적으로는 각 파일을 이동할 때 각 파일의 끝에 타임스탬프를 추가하고 싶습니다. 그러면 다음과 같은 결과가 나옵니다.file.name.1.yyyymmddhhmmss
누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 이 작업을 수행하려면 어떤 형태의 루프를 사용해야 한다고 생각하지만 방법을 모르겠습니다.
답변1
예를 들어 아래와 같이 for 루프를 사용하여 이 작업을 수행할 수 있습니다.
for f in /routea/path/to/dir1/file.name.? ; do fn=`echo $f | cut -d'/' -f6`; mv $f /routeb/path/to/dir2/$fn.`date +%Y%m%d%H%M` ; done
잘라내기 명령은 하위 디렉터리 수에 따라 사용자 정의되어야 합니다. 날짜도 추가됩니다. bash를 사용하여 RedHat에서 테스트되었습니다.
디렉터리에서 명령을 시작하는 경우에는 /route/path/to/dir1/
필요하지 않습니다.
fn=`echo $f | cut -d'/' -f6`;
부분.
답변2
find dir1/ -name "file.name.[1-3]" -exec bash -c 'mv {} dir2/$(basename "{}").$(date +%Y%m%d%H%M%S)' \;
답변3
그리고 zsh
:
autoload zmv # best in ~/.zshrc
zmv "/routea/path/to/dir1/(file.name.<1-3>)" "/routeb/path/to/dir2/\$1.$(date +%Y%m%d%H%M%S)"