Вы можете заменить эту команду на find
вместо globbing и сделать это
sudo find . -maxdepth 1 ! -name "." -exec du -hsx {} + | sort -rh | head -10
при условии, что ваш find
поддерживает нотацию +
.
Это позволит найти все в текущем каталоге, не спускаясь глубже, и игнорируя "." (спасибо за напоминание @rudimeier!)
Это будет включать все файлы в текущем каталоге, как и glob, который у вас был изначально. В отличие от того glob, это также найдет файлы, начинающиеся с .
(если только вы не играли с опциями оболочки, чтобы включить dotglob
).
Используйте bash
встроенный -вselect
:
IFS=$'\n'; select file in $(find -type f -name pom.xml); do
$EDITOR "$file"
break
done; unset IFS
На «бонусный» вопрос, добавленный в комментарий:
declare -a manifest
IFS=$'\n'; select file in $(find -type f -name pom.xml) __QUIT__; do
if [[ "$file" == "__QUIT__" ]]; then
break;
else
manifest+=("$file")
fi
done; unset IFS
for file in ${manifest[@]}; do
$EDITOR "$file"
done
# This for loop can, if $EDITOR == vim, be replaced with
# $EDITOR -p "${manifest[@]}"
Две маленькие функции помогут вам решить эту проблему при условии, что ваши имена файлов не содержат символов новой строки или других непечатаемых -символов. (Он обрабатывает имена файлов, содержащие пробелы.)
findnum() { find "$@" | sed 's!^\./!!' | nl; }
wantnum() { sed -nr "$1"'{s/^\s+'"$1"'\t//p;q}'; }
Пример
findnum -name pom.xml
1 projectA/pom.xml
2 projectB/pom.xml
3 projectC/pom.xml
!! | wantnum 2
projectB/pom.xml
вы можете получить заголовок всех выходных данных и завершить его с помощью -1. это может передать вывод в любую другую команду или редактор. например.
(дайте мне 100 строк и напечатайте мне наконец 100 )найти. | головка -100 | хвост -1
xxx@prod01 (/home/xxx/.ssh) $ find.
.
./authorized_keys
./id_rsa
./id_rsa.pub
./id_rsa_b_x.pub
./id_rsa_a_y.pub
./known_hosts
xxx@prod01 (/home/xxx/.ssh) $ find. | head -3
.
./authorized_key
./id_rsa
xxx@prod01 (/home/xxx/.ssh) $ find. | head -3 | tail -1
./id_rsa
eg: vim "$(find. | head -100 | tail -1)"
даст вам 100-ю строку поиска.
Если вашей целью является редактирование файлов после поиска, попробуйте sag/sack .
Пример:
$ sag skb_copy
sack__option is: -ag
============> running ag! <============
===> Current Profile: no_profile
===> Using flags:
===> Searching under: /home/fklassen/git/pvc-appliance/kernel/drivers/ixgbevf
===> Searching parameters: skb_copy
/home/fklassen/git/pvc-appliance/kernel/drivers/ixgbevf/kcompat.c
[1] 195: skb_copy_bits(skb, offset, buffer, len) < 0)
/home/fklassen/git/pvc-appliance/kernel/drivers/ixgbevf/kcompat.h
[2] 1774: if (skb_copy_bits(skb, offset, buffer, len) < 0)
[3] 2321:#define skb_copy_to_linear_data(skb, from, len) \
[4] 2323:#define skb_copy_to_linear_data_offset(skb, offset, from, len) \
... затем для редактирования последнего результата поиска....
F 4
Преимущество заключается в том, что вы можете позже вернуться к редактированию первого результата поиска с помощью
F 1