전체 경로(접두사)로 파일 이름을 바꾸시겠습니까?

전체 경로(접두사)로 파일 이름을 바꾸시겠습니까?

다음과 같이 파일에 접두사( )를 추가하고 싶습니다 .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

현재 스크립트에 대한 두 가지 변경 사항:

  1. 아니요ls를 구문 분석하다;반대 의존성쉘 와일드카드 정보

  2. 파일이 하위 디렉터리에 있으므로 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

관련 정보