특정 파일을 한 디렉터리에서 다른 디렉터리로 이동해야 하는 요구 사항이 있습니다. "req_files.txt" 파일에 필수 파일 목록이 있습니다.
prev_dir=/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder
new_dir=/cygdrive/c/Users/abhisek.samanta/Desktop/New
cd $prev_dir
for i in `cat req_files.txt`
do
mv $prev_dir/$i $new_dir
done
하지만 다음과 같은 오류가 발생합니다.
mv: cannot stat `/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder/dbo.account_address_adt.Table\r': No such file or directory
개행 문제를 제거하기 위해 명령을 시도했지만 여전히 작동하지 않습니다.
sed -i 's/\r$//' test.sh
답변1
먼저 \r
파일 이름에서 이를 제거하려면 다음을 시도해 보세요.
FILENAME=$(echo $FILENAME|tr -d '\r')
-d
문자 삭제
반복과 함께 이 방법을 사용하는 것이 좋습니다.
while read filename ; do
filename=$(echo $filename |tr -d '\r')
mv $prev_dir/$filename $new_dir
done < $prev_dir/req_files.txt
답변2
어제 공유한 다음 코드를 완성했습니다. 아래 o/p를 참조하세요. 오류를 공유하세요.
[root@rhel1 New_folder]# ll
total 12
-rw-r--r--. 1 root root 0 Dec 7 23:34 1
-rw-r--r--. 1 root root 0 Dec 7 23:34 3
-rw-r--r--. 1 root root 0 Dec 30 16:34 new folder1
-rw-r--r--. 1 root root 0 Dec 30 16:34 new folder2
-rw-r--r--. 1 root root 0 Dec 30 16:34 new folder3
-rw-r--r--. 1 root root 11 Dec 8 01:13 req_files.txt
-rwxr-xr-x. 1 root root 231 Dec 8 01:22 tesh.sh
-rw-r--r--. 1 root root 135 Dec 8 01:21 test1.sh
[root@rhel1 New_folder]# cat req_files.txt
New folder
[root@rhel1 New_folder]# vi req_files.txt
[root@rhel1 New_folder]# sh -x tesh.sh
++ echo -en '\n\b'
+ IFS=' '
+ prev_dir=/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder
+ new_dir=/cygdrive/c/Users/abhisek.samanta/Desktop/New
+ cd /cygdrive/c/Users/abhisek.samanta/Desktop/New_folder
++ cat req_files.txt
+ for i in '`cat req_files.txt`'
+ mv '/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder/new folder1' /cygdrive/c/Users/abhisek.samanta/Desktop/New/
+ for i in '`cat req_files.txt`'
+ mv '/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder/new folder2' /cygdrive/c/Users/abhisek.samanta/Desktop/New/
+ for i in '`cat req_files.txt`'
+ mv '/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder/new folder3' /cygdrive/c/Users/abhisek.samanta/Desktop/New/
+ IFS=
[root@rhel1 New_folder]# ll
total 12
-rw-r--r--. 1 root root 0 Dec 7 23:34 1
-rw-r--r--. 1 root root 0 Dec 7 23:34 3
-rw-r--r--. 1 root root 36 Dec 30 16:34 req_files.txt
-rwxr-xr-x. 1 root root 231 Dec 8 01:22 tesh.sh
-rw-r--r--. 1 root root 135 Dec 8 01:21 test1.sh
[root@rhel1 New_folder]# ll ../New/
total 0
-rw-r--r--. 1 root root 0 Dec 7 23:34 2
-rw-r--r--. 1 root root 0 Dec 7 23:34 4
-rw-r--r--. 1 root root 0 Dec 7 23:34 5
-rw-r--r--. 1 root root 0 Dec 8 00:56 New folder
-rw-r--r--. 1 root root 0 Dec 30 16:34 new folder1
-rw-r--r--. 1 root root 0 Dec 30 16:34 new folder2
-rw-r--r--. 1 root root 0 Dec 30 16:34 new folder3
[root@rhel1 New_folder]#
답변3
시간을 내어 문제를 해결해 주셔서 감사합니다. 이 문제를 해결하기 위한 나의 접근 방식을 공유하고 싶습니다.
prev_dir=/cygdrive/c/Users/abhisek.samanta/Desktop/Table_scripts
new_dir=/cygdrive/c/Users/abhisek.samanta/Desktop/New
cd $prev_dir
for i in `cat req_files.txt`
do
sed -i 's/\r$//' $i
echo $i
cd $prev_dir
mv $i $new_dir
done
동일한 이전 단축 코드는 별다른 조정 없이 작동합니다. 여러분의 진심 어린 협조에 감사드립니다. :)
답변4
필드 구분 기호를 결정하려면 IFS를 사용하십시오.
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
prev_dir=/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder
new_dir=/cygdrive/c/Users/abhisek.samanta/Desktop/New
cd $prev_dir
for i in `cat req_files.txt`
do
mv $prev_dir/$i $new_dir/
done
IFS=$SAVEIFS