選択したファイルをあるディレクトリから別のディレクトリに移動するシェルスクリプト

選択したファイルをあるディレクトリから別のディレクトリに移動するシェルスクリプト

特定のファイルをあるディレクトリから別のディレクトリに移動する必要があります。 "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

関連情報