#bash #hash #password-hash #sha512 #cracking
#linux #bash #unix
Вопрос:
Я хочу зафиксировать вывод приведенной ниже команды в переменной.
Команда:
find . -iname 'FIL*'.TXT
Вывод :
./FILE1.TXT
Я хочу захватить ‘./FILE1.TXT’ в переменную ‘A’. Но когда я пытаюсь
A=`find . -iname 'FIL*'.TXT`
затем эта команда отображает данные файла. Но мне нужно ./FILE1.TXT
значение в переменной A.
Комментарии:
1. Пожалуйста, улучшите формулировку вашего вопроса. Имя файла не совпадает с содержимым файла (а некоторые файлы не имеют или имеют несколько имен, поскольку файлы являются индексами ).
2. Непонятно, почему команда в back-ticks копирует данные из вашего файла в вашу переменную, а не имя файла. Как правило, лучше использовать
$(...)
нотацию для подстановки команд , но это не должно влиять на ситуацию. Вы могли бы использоватьfind
команды, но это не должно иметь значения. Возможно, вы неправильно обращаетесь с кодом, который сообщает имя файла; это должно быть простоecho "$A"
илиprintf "%sn" $A
или что-то подобное. Будьте осторожны с пробелами (или, что еще хуже, с новыми строками) в именах файлов.
Ответ №1:
# ls *.txt
test1.txt test.txt
# find ./ -maxdepth 1 -iname "*.txt"
./test1.txt
./test.txt
# A=$(find ./ -maxdepth 1 -iname "*.txt")
# echo $A
./test1.txt ./test.txt
Вы можете игнорировать -maxdepth 1
, если хотите. Я должен был использовать его для этого примера.
Или с помощью одного файла:
# ls *.txt
test.txt
# find ./ -maxdepth 1 -iname "*.txt"
./test.txt
# A=$(find ./ -maxdepth 1 -iname "*.txt")
# echo $A
./test.txt
Ответ №2:
Вы пытаетесь ?
A="`find . -iname 'FIL*'.TXT`"
и
A="`find . -iname 'FIL*'.TXT -print`"
Ответ №3:
Файл не имеет никакого значения, но имеет содержимое. Для отображения этого содержимого используйте следующее.
find . -iname 'FIL*'.TXT -exec cat {} ;
Если вы хотите, чтобы все содержимое (всех таких файлов) было в переменной, то
A=$(find . -iname 'FIL*'.TXT -exec cat {} ;)
Кстати, вы могли бы использовать
find . -iname 'FIL*.TXT' -print0 | xargs -0 cat
Если вам нужны имена таких файлов в переменной, попробуйте
A=$(find . -iname 'FILE*.txt' -print)
Кстати, в некоторых нескольких последних интерактивных оболочках ( zsh
bash
версии 4, но не более ранних версиях) просто напишите
A=**/FILE*.txt
Мне кажется, что эта **
функция сама по себе стоит того, чтобы перейти на более новую оболочку, но это только мое мнение.
Кроме того, не забывайте, что файлы могут иметь несколько имен или вообще не иметь их. Прочитайте об индексах …
Комментарии:
1. Но мне нужно имя файла, потому что имя файла является динамическим. Оно может отличаться после FIL word.
2. Приведенные выше команды отображают содержимое файла. Я не хочу видеть содержимое файла. Не могли бы вы, пожалуйста, предложить другое решение.
3. эй, последний не работает. кошка: */FILE.txt : Нет такого файла или каталога
4. Двойная звезда
**/
является расширением в некоторых оболочках, напримерzsh
, илиbash
версии 4, но не версии 3. Вы могли бы рассмотреть возможность использованияzsh