У меня есть каталог с почти 400 файлами, и я хочу назначить все файлы .txt одной переменной в скрипте bash, который я пишу. Однако я не совсем уверен, как это сделать. Меня интересуют только сами имена файлов, а не их содержимое.
решение1
Если вам нужны имена, то, вероятно, лучше всего присвоить их массиву.
names=( *.txt )
Если вам нужно содержимое, то
contents="$( cat *.txt )"
решение2
Сделайте что-нибудь вроде этого. Этот однострочный код создает массив для всех .txt
файлов в /root/tmpdir
папке:
[root@localhost ~]# export LIST=() ; for file in `find /root/tmpdir -name *.txt -exec readlink -e '{}' \;` ; do LIST+=($file) ; done
[root@localhost ~]# echo ${LIST[*]}
/root/tmpdir/newdir/file.txt /root/tmpdir/file.txt
[root@localhost ~]#
Или вы можете просто создать переменную, содержащую имена файлов, разделенные символом ,
:
[root@localhost ~]# export LIST; for file in `find /root/tmpdir -name *.txt -exec readlink -e '{}' \;` ; do LIST=$LIST$file, ; done
[root@localhost ~]# echo $LIST
/root/tmpdir/newdir/file.txt,/root/tmpdir/file.txt,
ПС
Оба примера ищут расширение файла, .txt
а не его содержимое. Плюс, этот поиск рекурсивный, вы можете изменить аргументы, чтобы он искал только в одной папке.