сценарий оболочки для перемещения выбранных файлов из одного каталога в другой

У меня есть требование, в котором мне нужно переместить определенные файлы из одного каталога в другой. У меня есть список желаемых файлов в файле "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 

5 Solutions collect form web for “сценарий оболочки для перемещения выбранных файлов из одного каталога в другой”

Прежде всего для удаления \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 

Я делаю это с приведенным ниже кодом, пожалуйста, см. Ниже о / 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]# 

Спасибо всем за то, что они потратили время на сортировку моей проблемы. Я хотел бы поделиться тем, как я это решил:

 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 

Тот же старый короткий код работал без особых ухищрений. Спасибо всем за ваше искреннее сотрудничество. 🙂

Я знаю, что это уже пару дней, но я не уверен, что петли оболочки необходимы, так как команда sed может самостоятельно прочитать весь файл, прежде чем использовать что-то вроде xargs для объединения всех файлов в один mv команда:

 prev_dir=/cygdrive/c/Users/abhisek.samanta/Desktop/Table_scripts new_dir=/cygdrive/c/Users/abhisek.samanta/Desktop/New cd ${prev_dir} sed 's/\r$//' filelist | xargs mv -t $new 

Здесь, используя заданные каталоги и команду sed вы нашли, работает, так как все xargs в xargs , она добавляет каждую строку из канала в команду mv , которая может принимать несколько файлов, а затем перемещать их все в каталог с флагом -t

 $ > cat movefile.sh new="$(pwd)/dir1/" sed 's/\r$//' filelist | xargs mv -t $new $ > cat -v filelist file1^M file2^M file3^M $ > touch file{1,2,3} $ > ls -l total 16 drwxr-xr-x 2 grownups users 4096 Jan 1 22:29 dir1 -rw-r--r-- 1 grownups users 0 Jan 1 22:30 file1 -rw-r--r-- 1 grownups users 0 Jan 1 22:30 file2 -rw-r--r-- 1 grownups users 0 Jan 1 22:30 file3 -rw-r--r-- 1 grownups users 22 Jan 1 22:26 filelist -rwxr--r-- 1 grownups users 61 Jan 1 22:29 movefile.sh $ > ls dir1/ $ > ./movefile.sh $ > ls -l dir1/ total 0 -rw-r--r-- 1 grownups users 0 Jan 1 22:30 file1 -rw-r--r-- 1 grownups users 0 Jan 1 22:30 file2 -rw-r--r-- 1 grownups users 0 Jan 1 22:30 file3 $ > 

Используйте 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 
  • Как перебирать несколько расширений файлов, не заботясь о чувствительности к регистру?
  • Как назначить вывод команды переменной без запуска команды в подоболочке?
  • В чем смысл $? в сценарии оболочки?
  • Bash Script для cp-файлов из списка
  • Написание сценария, который показывает, сколько строк имеет «X» и «Y» в нем?
  • Проверьте, установлена ​​ли папка удаленной файловой системы
  • Как эскалировать сигнал?
  • Шебанг, начинающийся с `//`?
  • чтобы проверить, действительно ли ввод действителен для ввода программ C
  • Как прочитать вывод команд в скрипте
  • копирование файлов в другое место
  • Linux и Unix - лучшая ОС в мире.