найти команду, перечислить вывод и разрешить выбор?

Вы можете заменить эту команду на find вместо globbing и сделать это

sudo find . -maxdepth 1 ! -name "." -exec du -hsx {} + | sort -rh | head -10

при условии, что ваш find поддерживает нотацию +.

Это позволит найти все в текущем каталоге, не спускаясь глубже, и игнорируя "." (спасибо за напоминание @rudimeier!)

Это будет включать все файлы в текущем каталоге, как и glob, который у вас был изначально. В отличие от того glob, это также найдет файлы, начинающиеся с . (если только вы не играли с опциями оболочки, чтобы включить dotglob).

10
17.07.2017, 19:12
4 ответа

Используйте 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[@]}"
16
27.01.2020, 20:00

Две маленькие функции помогут вам решить эту проблему при условии, что ваши имена файлов не содержат символов новой строки или других непечатаемых -символов. (Он обрабатывает имена файлов, содержащие пробелы.)

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
3
27.01.2020, 20:00

вы можете получить заголовок всех выходных данных и завершить его с помощью -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-ю строку поиска.

3
27.01.2020, 20:00

Если вашей целью является редактирование файлов после поиска, попробуйте 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
1
27.01.2020, 20:00

Теги

Похожие вопросы