Рейтинг:5

как использовать аргумент командной строки, чтобы найти файл .txt с общим именем

флаг us

У меня есть несколько файлов в каталоге с именем файлы. Мне нужно прочитать каждый файл .txt из этого каталога:

abc123.txt
abc234.txt
abc345.txt
abc.txt
def123.txt
def234.txt
def345.txt

Например, когда я печатаю ./filter.sh абв в терминале он будет искать .текст файл, имя которого содержит азбука.

#!/бин/баш
 
ввод1=$1


найти ./files -type f -name "*$input1*.txt" 

мой вывод выглядит так

./файлы/abc345.txt
./файлы/abc234.txt
./файлы/abc123.txt
./файлы/abc.txt

правильно ли я делаю? И еще, можно ли не показывать ./файлы/ на выходе? И почему мой вывод показывает abc345, abc234, abc123 вместо abc123, abc234, abc345?

Рейтинг:9
флаг jp
  • Да, это хорошо. Но когда вы познакомитесь с найти, вы сделаете это прямо в командной строке (а не через шеллскрипт). Я часто использую шеллскрипты, но в основном для больших задач (несколько командных строк).

  • Вы можете удалить начальную точку, под которой он был найден:

    find ./files -type f -name "*$input1*.txt" -printf "%P\n"
    
  • Наконец, вы можете отсортировать файлы после этого:

    find ./files -type f -name "*$input1*.txt" -printf "%P\n" | Сортировать
    
  • Если небольшое количество или небольшие файлы, вы можете записать содержимое на терминал с помощью

    find ./files -type f -name "*$input1*.txt" -exec echo "--- {}:" \; -exec кот {} \;
    

    Вывод может быть перенаправлен в файл с помощью > вывод.txt

    find ./files -type f -name "*$input1*.txt" -exec echo "--- {}:" \; -exec кот {} \; > вывод.txt
    

    Прокрутите горизонтально, чтобы увидеть конец этой строки.

  • если много файлов или какой-то большой файл, может быть лучше просматривать файлы в меньшем или, может быть, в вашем любимом текстовом редакторе,

    find ./files -type f -name "*$input1*.txt" -exec less {} \;
    

    и выйдите с 'q' из меньшего между каждым файлом.

  • найти против лс

    • найти это продвинутый инструмент который может находить файлы [рекурсивно] в дереве каталогов и имеет множество опций. Нужно много времени, чтобы узнать, что с ним можно сделать. Видеть мужчина находит или, может быть, проще, см. учебник через Интернет.

    • лс это более простой инструмент, в котором перечислены файлы на одном уровне каталога, обычно на текущем уровне. Он также имеет много вариантов, но довольно легко использовать из командной строки. Помните, что лс может вести себя запутанно в сценариях оболочки, особенно в сочетании с другими командами. Видеть мужчина лс.

user15907922 avatar
флаг us
Ааа, спасибо работает! Могу ли я узнать, как прочитать или распечатать содержимое из этого текстового файла? я пытался сделать около 1 дня уже до сих пор не могу понять
vanadium avatar
флаг cn
Что касается пункта 1, если это повторяющаяся работа, создание сценария оболочки, очевидно, является хорошей практикой.
sudodus avatar
флаг jp
@ user15907922, что вы подразумеваете под чтением или печатью? Вы хотите распечатать все на терминал или просмотреть их в каком-то инструменте или распечатать на бумажном принтере?
user15907922 avatar
флаг us
распечатать содержимое текстового файла на терминал.
sudodus avatar
флаг jp
@user15907922 user15907922, предлагаю пару способов просмотра файлов. Будет ли работать один из них?
user15907922 avatar
флаг us
@sudodus да, это работает. большое спасибо! И могу ли я узнать, как скопировать этот контент из файла .txt в другой файл .txt? скажем, скопировать в copy.txt
sudodus avatar
флаг jp
Вы можете **перенаправить** вывод на терминал в файл с помощью `>`. Я покажу это, отредактировав ответ.
user15907922 avatar
флаг us
это работа! Спасибо за помощь!
Рейтинг:5
флаг in

Вы можете сделать это так и следовать совету @sudodus, чтобы улучшить вывод.

Однако найти немного излишне для вашего варианта использования, вы можете просто использовать лс:

ls -1 файлов/abc*

Чтобы получить имя каталога:

(cd файлы && ls -1 abc*)
user15907922 avatar
флаг us
но как скопировать этот контент в файл txt в другой файл .txt?
pLumo avatar
флаг in
что ты имеешь в виду? Я не вижу этой части в вашем вопросе. Вы хотите сделать `cat files/abc*` или `less files/abc*`?
user15907922 avatar
флаг us
все в порядке, я решил это. Спасибо за помощь!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.