我有一个要求,必须将特定文件从一个目录移动到另一个目录。我在文件“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