По умолчанию, как вы видели, find
печатает полные пути:
$ find /home/people/name -type f
/home/people/name/filename1.txt
/home/people/name/filename3.txt
/home/people/name/filename2.txt
find
, однако, предлагает контроль над выводом, используя -printf
. Чтобы получить только имя файла без пути, попробуйте:
$ find /home/people/name -type f -printf '%f\n'
filename1.txt
filename3.txt
filename2.txt
%f
говорит find
, что вы хотите имя файла без пути. \n
сообщает find
, что вы хотите новую строку после каждого имени файла.
Вывод, конечно, может быть сохранен в файл:
$ find /home/people/name -type f -printf '%f\n' >output.txt
$ cat output.txt
filename1.txt
filename3.txt
filename2.txt
Методы с восклицательным знаком в конце часто называют методами удара. Метод удара не обязательно изменяет свой получатель, а также нет никакой гарантии, что методы без восклицательного знака не делают.
Это очень хорошо, объяснил в этом сообщении в блоге. Процитировать сообщение:
! в именах методов тот конец с! средство, “Этот метод опасен” — или, более точно, этот метод, является “опасной” версией в других отношениях эквивалентного метода с тем же именем минус!. “Опасность” относительна;! не означает ничего вообще, если имя метода, в котором это находится, не соответствует подобному имени метода, но имени метода удара меньше.
и
! не означает, что “Этот метод изменяет свой получатель”. Много “опасных” методов действительно изменяет их получатели. Но некоторые не делают. Я повторяюсь:! не означает, что метод изменяет свой получатель.
Неудар downcase () метод просто возвращается, новый объект, представляющий Вас, представляют downcased в виде строки.
Версия удара изменяет Вашу строку саму.
my_text = "MY TEXT"
my_new_text = my_text.downcase
puts my_new_text # will print out "my text"
puts my_text # will print out "MY TEXT" - the non-bang method doesn't touch it
my_text.downcase!
puts my_text # will print out "my text". The bang version has modified the object you're calling the method on