![전체 경로로 파일(접두사) 이름을 바꾸시겠습니까?](https://rvso.com/image/89180/%EC%A0%84%EC%B2%B4%20%EA%B2%BD%EB%A1%9C%EB%A1%9C%20%ED%8C%8C%EC%9D%BC(%EC%A0%91%EB%91%90%EC%82%AC)%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BE%B8%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
내 파일( ) 앞에 다음과 같이 접두사를 붙이고 싶습니다 .dat
.
CLY_BIZ_COM_PERD.dat -> 20160622CLY_BIZ_COM_PERD.dat
나는 다음을 시도했습니다 :
key=`date "+%Y%m%d"`
for i in $(ls /Path/*.dat); do mv ${i} "${key}${i}" ;done
하지만 이 명령은접미사내 파일에 접두사가 붙지 않습니다. 어떻게 해야 하나요?
답변1
현재 스크립트에 대한 두 가지 변경 사항:
~하지 않다ls를 구문 분석하다;대신에 의존하다껍질의 글로빙에
파일이 하위 디렉터리에 있으므로
cd
먼저 루프를 실행하거나 접두사를 추가하기 전에basename
및를 사용하여dirname
파일의 디렉터리 및 파일 이름 부분을 가져옵니다.
(참고: 루트 수준 /Path 디렉터리를 만들고 싶지 않았기 때문에 "/Path"도 "./Path"로 변경했습니다. 하지만 동일한 원칙이 적용됩니다.
일부 샘플 파일을 설정하려면 다음 안내를 따르세요.
mkdir Path && cd Path
touch CLY_BIZ_COM_PERD.dat jeff.dat a.dat c\ d.dat
cd ..
다음은 테스트 실행입니다.
for f in ./Path/*.dat
do
printf "mv '%s' '%s'\n" "$f" "$(dirname "$f")/${key}$(basename "$f")"
done
연습 실행 결과:
mv './Path/a.dat' './Path/20160622a.dat'
mv './Path/c d.dat' './Path/20160622c d.dat'
mv './Path/CLY_BIZ_COM_PERD.dat' './Path/20160622CLY_BIZ_COM_PERD.dat'
mv './Path/jeff.dat' './Path/20160622jeff.dat'
만족했다면 실제로 해 보세요.
for f in ./Path/*.dat
do
mv "$f" "$(dirname "$f")/${key}$(basename "$f")"
done
... 결과는 다음과 같습니다.
$ ls -1 Path
20160622a.dat
20160622c d.dat
20160622CLY_BIZ_COM_PERD.dat
20160622jeff.dat