Intereting Posts
Блокировать входящий порт Разделить большой файл txt на определенный небольшой файл Журнал Systemd преследует сообщения докеров В чем преимущество архивирования объектных файлов C в статической библиотеке (файл .a)? Изящно обрабатывать проигрывание экспортированного X-дисплея механизм разрешения монтирования для файловых исследователей Как разделить переменную $ 0, чтобы найти каталог и относительные пути в bash? компиляция с gcc для пользователей, но отлично подходит для root Резервное копирование на диск Amazon Cloud Postfix: пользователи выдают себя за других пользователей в одном домене Переход KVM в Ovirt VM Выполнить встроенный командный удаленный сервер с помощью ssh Подавлять файлы восстановления при редактировании конфиденциальных файлов в vi, nvi и vim Существуют ли сценарии дедупликации, использующие btrfs CoW в качестве дедупликации? Помощь с программой в программе sendmail / etc / aliases

Как перемещать или копировать список файлов, на которые ссылается файл csv, в новую папку

Я хотел бы написать сценарий оболочки (OSX), который копирует файлы, перечисленные в файле csv, в конкретный каталог. Мне нужно вырезать кавычки из каждой строки в файле csv.

Моя попытка

for i in $(cat myfile.csv) temp="${$i%\"}" temp="${temp#\"}" do cp foldername/$temp foldername/subfoldername done 

Я получаю эту ошибку:

 ./mfcsv.sh: line 2: syntax error near unexpected token `temp="${$i%\"}"' ./mfcsv.sh: line 2: ` temp="${$i%\"}"' 

Положите do после разложения параметров, а не раньше. И оставьте знак $ в расширении и используйте двойные кавычки вокруг расширений, кроме как при назначении переменной. Например

 while read file do temp=${file%\"} temp=${temp#\"} cp "foldername/$temp" "foldername/subfoldername" done < myfile.csv 

У вас есть 2 ошибки:

  1. Неправильный синтаксис цикла, должен быть на 2-й строке
  2. плохой синтаксис подстановки, без знака доллара, прежде чем i понадобится

Попробуй это:

 #!/bin/bash for i in $(cat myfile.csv) do temp="${i%\"}" temp="${temp#\"}" cp foldername/$temp foldername/subfoldername done 

но он будет терпеть неудачу, если у вас есть пробелы в именах файлов. Сценарий ниже будет работать и с пробелами:

 #!/bin/bash while read i; do temp="${i%\"}" temp="${temp#\"}" cp "foldername/$temp" "foldername/subfoldername" done < myfile.csv