모델 입력을 위해 변경해야 할 포인트 파일이 많습니다. 내용에 따라 많은 파일의 이름을 바꾸고 싶습니다. 이 파일은 한 줄로 정렬된 텍스트 파일입니다.
파일 이름:data_lat_long.txt
1 data_20_20
2 data_30_40
3 data_50_60
.
.
등.
내 파일 이름은 1
, 2
, 등 입니다 3
.4
로 , 에서 로 , 등 1
으로 변경하고 싶습니다 .data_20_20
2
data_30_40
답변1
while read line ; do
mv $line
done < data_lat_long.txt
파일의 각 줄을 읽고 각 줄을 라는 변수에 할당하는 루프 data_lat_long.txt
로 파일 내용을 리디렉션합니다 . 그런 다음 내용을 인수로 사용하여 실행합니다(이것은 파일에 지정한 시작 부분과 끝 부분입니다). 파일이 끝날 때까지 계속 반복합니다.while
read
$line
mv
$line
data_lat_long.txt
이는 파일 이름에 data_lat_long.txt
공백이 포함되어 있지 않음을 암시적으로 예상합니다(따라서 두 개의 열만 있음).
파일에 공백이 있으면 파일에 쉼표 구분 기호를 사용하는 것이 좋습니다.
1,space file1
2,space file2
3,space file3
그런 다음 다음을 사용하십시오.
while IFS=',' read -a files
do
mv "${files[0]}" "${files[1]}"
done < list.txt
이는 (이 경우 쉼표)로 구분된 텍스트를 이름이 지정된 배열에 할당하는 옵션을 활용합니다 -a
. 그런 다음 개별 요소를 색인화하고 매개변수를 큰따옴표로 묶습니다. 이렇게 하면 명령을 실행할 때 배열 값이 확장됩니다.read
IFS
$files
mv
""
mv
그리고따라서 파일의 공백은 매개변수 구분 기호로 처리되지 않습니다 mv
. mv 1 space file1
와 같은 일을 하지 않습니다 mv "1" "space file1"
. 이전 명령은 1
및 이라는 파일/디렉토리를 space
이라는 디렉터리로 이동하려고 시도합니다 file1
.