用于将选定文件从一个目录移动到另一个目录的 shell 脚本

用于将选定文件从一个目录移动到另一个目录的 shell 脚本

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

相关内容