Название файла без пути:
$(basename $file)
Меняем расширение у всех файлов в директории: for f in *.arc; do mv "$f" "`basename "$f" .arc`.dbf"; done;
Название файла без расширения:
Use ${x%.*} to remove everything after a dot or ${x%%.*} to remove everything after the first dot.
Example: $ x="/foo/fizzbuzz.bar.quux" $ y=${x%.*} $ echo $y /foo/fizzbuzz.bar $ y=${x%%.*} $ echo $y /foo/fizzbuzz
Цикл с функцией (regexp, например):
... |while read OUT; do echo ${OUT%.*}; done| ...
Более конкретный пример, удаляем расширение gz из имени всех файлов в директории:
ls *.gz | while read OUT; do echo ${OUT%.*}; done | xargs mv {}.gz {}
ls *.gz | while read OUT; do echo ${OUT%.*}; done | /usr/local/bin/parallel -P 1 mv {}.gz {}
Удаляем из пути префикс с корневой директорией: sed -e "s:\($ROOT_PREFIX\)\(.*\):echo \2 :"
Например, копируем файлы из одной директории в другую: find /u01/dir/ -name "*.zip" | sed -e "s:\(/u01/dir\)\(.*\):/bin/scp /u01/dir/\2 user_name\@target_host\:/u02/dir/\2 :" | /usr/local/bin/parallel -P 10 /bin/bash -c "{}"
хорошая статья про использование find для разных операций: http://www.ibm.com/developerworks/aix/library/au-unix-find.html
Вывести диапазон строк из файла: sed -n '1850,1883p' 20130329180000.xml
|