it-swarm-eu.dev

Třídění výstupu "najít"?

Musím být schopen abecedně setřídit výstup find, než ho pošlu na příkaz. Zadávání | sort | mezi nepracoval, tak co bych mohl udělat?

find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
90
Industrial

Jako obvykle použijte find a oddělte své řádky pomocí NUL. GNU sort to zvládne přepínačem -z:

find . -print0 | sort -z | xargs -r0 yourcommand
62
Oli

Některé verze sort mají -z možnost, která umožňuje nulové záznamy.

find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand

Kromě toho můžete také napsat skript na vysoké úrovni, abyste to mohli udělat:

find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand

Přidat -r možnost xargs, aby se ujistil, že myCommand je volán s argumentem.

62
Arcege

Myslím, že pro třídění # potřebujete vlajku -n

Podle druhu člověka:

-n, --numeric-sort
    compare according to string numerical value

pravit

Tisk0 může s tím mít něco společného, ​​právě jsem to testoval. Vyjměte print0, můžete řetězec ukončit pomocí příkazu -z

5
whoami

Pokud máte nainstalovánu GNU Parallel http://www.gnu.org/software/parallel/ , můžete to provést:

find folder1 folder2 -name "*.txt" -print | 
  sort |
  parallel myCommand

Můžete nainstalovat GNU paralelně jednoduše:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Podívejte se na úvodní videa na GNU Paralelní) a získejte více informací: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

2
Ole Tange