![목록을 사용하여 파일 이름 바꾸기](https://linux55.com/image/73051/%EB%AA%A9%EB%A1%9D%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%20%EB%B0%94%EA%BE%B8%EA%B8%B0.png)
내 디렉터리에 사용 가능한 파일이 있습니다.
filename15_1
filename15_2
filename15_3
filename15_4
등.
파일 이름을 바꾸는 방법에 대한 매핑 정보가 포함된 다른 파일이 있습니다. 이것은 CSV 파일입니다.
filename15_1,filename30_6
filename15_2,filename30_7
filename15_3,filename60_3
filename15_4,filename60_4
filename15_5,filename60_5
filename15_6,filename60_6
위의 매핑을 읽어서 이 4개 파일의 이름을 바꾸고 싶습니다. 맵 파일에는 디렉터리에 있는 실제 파일보다 더 많은 정보가 있습니다.
내 파일의 이름을 다음으로 바꿔야 합니다.
filename30_6
filename30_7
filename60_3
filename60_4
어떻게 해야 하나요?
참고: 저는 데이터베이스 배경을 가진 사람이고 Unix에 대해 아는 바가 거의 없습니다.
답변1
매핑 파일이 쉼표로 구분된 경우 다음을 수행할 수 있습니다.
while IFS=, read orig target; do
mv "$orig" "$target"
done < mapping.txt
답변2
읽기 쉽고 간결한 방법은 awk
s system
함수 입니다.
awk -F',' 'system("mv " $1 " " $2)' mappingFile.csv
입력 파일의 각 줄에 대해 명령이 실행됩니다.
명령 요약
awk
표 형식 데이터 작업에 이상적인 Unix 유틸리티-F','
"F
필드 구분 기호"는 쉼표입니다.system("mv " $1 " " $2)
입력 파일의 각 줄에 대해 실행system(x)
서브셸에서 x 실행$1
$2
첫 번째와 두 번째 열을 각각 참조 하십시오 ."mv " $1 " " $2
빌드 명령의 암시적 연결
mappingFile.csv
이 입력 파일을 사용하십시오
답변3
좋아요, 이것은 매우 어리석은 대답이지만:
sed -e 's/^/mv /' -e 's/,/ /' $mapping_file | sh
답변4
위의 답변을 참고하여 다음과 같이 코드를 수정했는데 작동합니다.
cd $SRCE
for file in *
do
while IFS="," read srce target
do
if [[ $file = $srce ]] ; then
mv "$srce" "$target"
fi
done < map_lst
done