2015-05-27 3 views
0

У меня есть требование, когда мне нужно скопировать файлы из списка на основе первого символа. Ниже, если вы видите, что у меня есть три строки в файле списка, и мне нужно скопировать строку, которая начинается с M и A, в новое место (например, место назначения/тестовая папка) и структура папок. Код также должен поддерживать пробелы. Любая помощь будет оценена.Как скопировать из списка файлов на основе первого символа

cat /tmp/patchfiles.txt 
M  Hyperion/Planning/AAAAA/Planning/HP-AAAAA/info plan/listing.xml 
A  Hyperion/Planning/AAAAA/Planning/Import.xml 
D  Hyperion/Planning/AAAAA/Planning/HP-AAAAA/Import.xml 
+0

Какую оболочку вы используете? Это влияет на лучший способ сохранения структуры каталогов. –

ответ

1

Простой while read цикл будет здесь достаточно:

while read -r status file; do 
    case $status in 
     M|A) 
      cp "$file" /path/to/destination 
      ;; 
    esac 
done < /tmp/patchfiles.txt 

Это читает каждую строку из файла, сохраняя первое поле в переменной $status, а остальные в $file. Если $status - это «M» или «A», файл копируется в пункт назначения.

Если у вас есть dirname на вашей системе, вы можете создать структуру каталогов довольно легко, как это:

dir="/path/to/destination/$(dirname "$file")" 
mkdir -p "$dir" && cp "$file" "$dir" 

В противном случае, вы могли бы использовать Баш как это:

dir="/path/to/destination/${file%/*}" 
mkdir -p "$dir" && cp "$file" "$dir" 

Это использует Баш встроенный - в строковых манипуляциях, чтобы обрезать часть имени файла после последнего /.

+0

Спасибо. он работает, но только копирует файлы не со структурой папок. –

+0

Я жду, чтобы услышать, какую оболочку вы используете (см. Мой комментарий выше), затем я могу предложить хороший способ получить каталог. –

+0

Привет, Том, я использую оболочку bash. –

Смежные вопросы