2017-02-01 3 views
0

У меня есть несколько вложенных папок, например:Копирование файлов из нескольких папок с включая имя папки в Linux

ls ./ 
F1 F2 F5 F8 F12 ... 

Каждая папка содержит файл «file.txt»

Как скопировать все файлы FILE.TXT основная папка, содержащая имя папки?

cp ./F1/file.txt ./file_1.txt 
cp ./F2/file.txt ./file_2.txt 
... 
+0

попробуйте мою ** команду ** на вашем терминале, и все. Всего одна строка! –

ответ

0
declare -a dirs 
i=1 
for d in */ 
do 
    dirs[i++]="${d%/}" 
done 
echo "There are ${#dirs[@]} dirs in the current path" 

for((i=1;i<=${#dirs[@]};i++)) 
do 
    echo "Copying file.txt from ${dirs[i]} dir..." 
    cp ./${dirs[i]}/file.txt ./file_$i.txt 
done 

Сохранить его как файл сценария, fileTxtCopy.sh, например. Затем поместите его в родительский каталог и дайте ему разрешение на выполнение sudo chmod +x fileTxtCopy.sh.

Запустите его как скрипт, и у вас должен быть весь файл file.txt, скопированный в родительский каталог.

0

Perl One Liner

первый перейти к главной папке, чем:

find . | perl -a -F/ -lne 'qx(cp -r "$F[1]" T/)'

примечание
не беспокоиться о файле журнала на экране, если бы!
T/
является вашей целевой каталог
основная папка
Где все файл существует. Если ваш весь файл находится в папке Музыка например; так cd Music то, что Perl One Liner

0

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

for i in *; do a=$(<<< "$i" grep -o "[0-9]*" -); cp "$i/file.txt" "file_$a.txt"; done 

Не самый надежный подход.

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