GNU/Linux >> Znalost Linux >  >> Linux

Získat všechny soubory kromě souborů v poli – Bash?

Musím napsat jednorázový nástroj, který provede nějakou operaci se všemi soubory v daném adresáři, ale se seznamem souborů v předdefinovaném seznamu. Vzhledem k tomu, že daný seznam je předdefinovaný, zakóduji jej napevno jako pole.

Jak však získat názvy všech souborů, které nejsou v daném poli? To může být v libovolném standardním unixovém skriptu (bash, awk, perl).

Přijatá odpověď:

S bash , můžete udělat:

all=(*)
except=(file1 file2 notme.txt)
only=()
IFS=/
for file in "${all[@]}"; do
  case "/${except[*]}/" in
    (*"/$file/"*) ;;     # do nothing (exclude)
    (*) only+=("$file")  # add to the array
  esac
done
ls -ld -- "${only[@]}"

(to funguje zde pro soubory v aktuálním adresáři, ale ne spolehlivě pro globs jako all=(*/*) except=(foo/bar) jako my používáme / pro spojení prvků pole pro vyhledávání).

Je založeno na skutečnosti, že "${array[*]}" spojuje prvky pole s prvním znakem $IFS (zde zvoleno jako / protože se jinak nemůže vyskytovat v souboru name; NUL je znak, který se nemůže vyskytovat v cestě souboru , ale bohužel bash (na rozdíl od zsh ) nemůže mít ve svých proměnných takový znak). Tedy pro každý soubor v $all (zde s $file být foo jako příklad) uděláme case "/file1/file2/notme.txt/" in (*"/foo/"*) zkontrolovat, zda $file je třeba vyloučit.


Linux
  1. Jak získat Tty ve kterém Bash běží?

  2. Výukový program Ultimate Bash Array s 15 příklady

  3. Jak získat všechny soubory přesahující určitou velikost a smazat je

  1. bash:vložte soubory seznamu do proměnné a velikost pole je 1

  2. Jak získám absolutní adresář souboru v bash?

  3. Odstraňte úložiště Git, ale ponechte všechny soubory

  1. Získat seznam všech souborů podle masky v terminálu?

  2. Smažte všechny soubory kromě nejnovějších 3 v bash skriptu

  3. bash - odstraní všechny adresáře (a obsah), ale ne soubory v pwd