ProvaPratica 2012.09.19

From Sistemi Operativi
Revision as of 00:20, 30 April 2014 by Edu san (talk | contribs) (Created page with " URL-> http://www.cs.unibo.it/~renzo/so/pratiche/2012.09.19.pdf ---- [Bash esercizio 3] In due versioni:<br> 1. one-liner, per amore di leggibilità <syntaxhighlight lang="Bas...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

URL-> http://www.cs.unibo.it/~renzo/so/pratiche/2012.09.19.pdf


[Bash esercizio 3] In due versioni:
1. one-liner, per amore di leggibilità

 IFS=$(echo -ne "\n\b") && file `find $DIRECTORY` | sed -rn "s/(.*):\ +`file -b $FILENAME`/\1/p"

Purtroppo se esistono troppi file nell'albero della directory non funziona (Argument list too long)
2. script

#!/bin/bash

SUCCESS=0
FAILURE=1

#Check arguments
if [[ $# -ne 2 ]]
then
	echo "Usage: `basename $0` file directory"
	exit $FAILURE
fi

IFS=$(echo -e "\n\b")        #set newline as separator
file_type=$(file -b $1)
file_list=$(find $2) 

for item in $file_list
do
	item_type=$(file -b $item)
	if [[ $item_type == $file_type ]]
	then
		echo $item
	fi
done

exit $SUCCESS

La riga di codice per settare il separatore l'ho trovata qui: http://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html . Non mi è chiaro perchè il separatore debba essere "\n\b" e non solo "\n", ma ho provato in varie salse, e questo è l'unico modo in cui lo script funziona. Eduardo