find [path] -name [filename]
Например, если бы я хочу искать / корневой каталог имя файла, содержащее нечто, я использовал бы команду:
find /home -name *foo*
используйте команду man find
для большего количества информации о команде находки и аргументах,
Можно работать student_head
когда в папке для автоматического добавления имени папки как заголовка в записываемые файлы в нем и его подкаталогах:
student_head_action() {
# We can't use parameter expansion on $PWD because of recursion
local _dirname="${1%/*}"
_dirname="${_dirname##*/}"
[[ -d $1 ]] && return 0
if ! [[ -w $1 && -f $1 ]]; then
printf '%s\n' "$1 does not exist or is not writeable, skipping"
return 1
fi
bash -c "ed -s {} <<< $'0a\n'"# Student: ${_dirname}"$'\n.\n,s/\r//g\nw'"
}
student_head() {
local _file
if (( $# )); then
for _file; do
student_head_action "${_file}" || _retval=1
done
else
if shopt -s globstar > /dev/null 2>&1; then
for _file in **/*; do
student_head_action "${_file}" || _retval=1
done
shopt -u globstar
else
printf '%s\n' 'Globstar isn't available, attempting to use GNU find...'
find . -type f -writable -exec bash -c '
_dirname="${1%/*}\
_dirname="${_dirname##*/}\
ed -s "$1" <<< '"$'0a\n'"'"# Student: ${_dirname}"'"$'\n.\n,s/\r//g\nw'" {} \;
fi
fi
return "${_retval-0}"
}
Вставьте эти функции Ваш ~/.bashrc
если Вы хотите student_head
всегда быть доступным для Вашего пользователя при использовании bash
.
student_head
может быть назван двумя способами:
Если файл в аргументах не существует, student_head
возвращает статус выхода 1.
Нужно упомянуть, что этот сценарий использует globstar
, который требует bash>=4.0
.
Вот объединение решения find
и ed
.
add_header() {
declare regex IFS='|'
(( $# )) && regex="^($*)$" || regex=""
find "$PWD" -type f -exec bash -c '
( exec grep -E -qs -e "$0" <<<"${1##*/}" ) || exit
_dirname="${1%/*}"
_dirname="${_dirname##*/}"
exec ed -s "${1}" <<EOF
0a
# Student: ${_dirname}
.
wq
EOF
' "${regex:-.+}" '{}' \;
return 0
}
add_header # all files in current directory recursively
add_header file1 file2 file3 # only named files in current directory recursively
find "$PWD"
бессмысленно, просто используйте find .
. Кроме того, Вы, кажется, неправильно понимаете использование exec
(это не должно использоваться таким образом, Вы используете его). Нет также никакой потребности в wq
, с тех пор EOF
завершения stdin (и завершения как таковые ed
). Вам также не удается объяснить провал - а именно, в минимуме, необходимо, по крайней мере, проверить, что указанный файл является и регулярным и перезаписываемым.
– Chris Down
16.09.2011, 21:28
ed
неправильно сконфигурированный. – Chris Down 16.09.2011, 20:26\r\n
кому:\n
, и исправил ошибку с именованием. А-ч – Chris Down 16.09.2011, 20:37