2016-03-06 1 views
0

У меня есть текстовый файл, содержащий список файлов, как это:Как перемещать файлы, перечисленные в текстовом файле, в соответствующие каталоги?

A file1.gz file2.gz 
B file3.gz file4.gz 
C file5.gz file6.gz 
D file7.gz file8.gz 
... 

A,B,C,D, ... является названием образцов, которые расположены в первом столбце, и я хочу, чтобы подкаталоги с именем образцов и двигаться (расположенных во втором и третьем столбцах) каждого образца в свои собственные каталоги. Как я могу сделать цикл для этого?

+0

Что вы вызываете «пакетный файл» это просто текстовый файл, содержащий список/таблицу элементов; a [tag: batch-file] - текстовый файл, который представляет собой скрипт с использованием команд командной строки Windows ... – aschipfl

+0

, пожалуйста, введите свой код, нажав [править] (http://stackoverflow.com/posts/35826790/edit) ссылку, а также показать, что ожидается и какие ошибки вы получите? – ritesht93

ответ

1

Когда поля в вашем textfile разделяются пробелами (и ваши имена файлов и директорий без пробелов), вы можете использовать

while read -r dir file1 file2; do 
    mkdir -p "${dir}" 
    if [ ! -d "${dir}" ]; then 
     echo "Something strange with ${dir}, I do not know what to do." 
     exit 1 
    fi 

    if [ -f "${file1}" ]; then 
     mv "${file1}" "${dir}" 
    fi 

    if [ -f "${file2}" ]; then 
     mv "${file2}" "${dir}" 
    fi 
done < textfile 

Это будет работать с фиксированным Н.Р. столбцов. Если вы хотите, чтобы поддержать неизвестный Н.Р. файлов на каждой строке, вы должны изменить это немного:

while read -r dir files; do 
    mkdir -p "${dir}" 
    if [ ! -d "${dir}" ]; then 
     echo "Something strange with ${dir}, I do not know what to do." 
     exit 1 
    fi 

    for file in ${files}; do 
     if [ -f "${file}" ]; then 
     mv "${file}" "${dir}" 
     fi 
    done 
done < textfile 
+0

отредактировал первое решение: изменил файл1 в файл2 в последней части. –