2012-06-04 2 views
4

Мне нужно написать скрипт, который читает все имена файлов из каталога, а затем в зависимости от имени файла, например, если он содержит R1 или R2, он объединяет все имена файлов, которые содержат, например, R1 в названии.Чтение имен файлов из каталога в Bash

Может ли кто-нибудь дать мне подсказку, как это сделать?

Единственное, что я был в состоянии сделать это:

#!/bin/bash 

FILES="path to the files" 

for f in $FILES 
do 
    cat $f 
done 

и это показывает мне только то, что переменная является каталогом не файлы, которые он имеет.

ответ

10

Чтобы сделать наименьшее изменение, которое исправляет проблему:

dir="path to the files" 
for f in "$dir"/*; do 
    cat "$f" 
done 

сделать то, что вы описали в качестве желаемой конечной цели:

shopt -s nullglob 
dir="path to the files" 
substrings=(R1 R2) 
for substring in "${substrings[@]}"; do 
    cat /dev/null "$dir"/*"$substring"* >"${substring}.out" 
done 

Обратите внимание, что cat может принимать несколько файлов в одном вызове - - на самом деле, если вы этого не делаете, вам обычно не нужно использовать кошку вообще.

0

Простой хак:

Ls -al R1 | awk '{print $ 9}'> outputfilenameR1

ls -al R2 | awk '{print $ 9}'> outputfilenameR2

+1

Если ваши имена файлов содержат пробелы, 'print $ 9' выберет только первую часть. И посмотрите другие оговорки в [Почему вы не должны анализировать вывод 'ls'] (http://mywiki.wooledge.org/ParsingLs). –

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