一連のファイルを処理したいです。
pi@raspberrypi:~/A6.1 $ ls -1
0bd57df4.code
0bd57df4.enc
3189204c.code
3189204c.enc
39f831fb.code
39f831fb.enc
68ff6d19.code
68ff6d19.enc
find.sh
test.sh
find.sh
マスクでファイルを検索するスクリプト()を実行し、別のスクリプト(test.sh
)を実行して、見つかったファイルの名前を引数として渡します。
テストモードでは、拡張子なしでフルファイル名と省略名を表示したいと思います。
find.shファイルの内容:
#!/bin/bash
find -name '*.enc' -printf "%f\0" | xargs -0 -n 1 ./test.sh
test.shファイルの内容:
# !/bin/bash
NAMEFILE=$1
FULLNAME=$NAMEFILE
CUTNAME=`echo ${NAMEFILE:0:6}`
echo "FULLNAME - "$FULLNAME
echo "FILENAME - $CUTNAME"
フルネームを表示し、省略形は表示しません。エラーメッセージを表示します。変数をどのように処理しますか?
pi@raspberrypi:~/A6.1 $ ./find.sh
./test.sh: 1: ./test.sh: Bad substitution
FULLNAME - 68ff6d19.enc
FILENAME -
./test.sh: 1: ./test.sh: Bad substitution
FULLNAME - 3189204c.enc
FILENAME -
./test.sh: 1: ./test.sh: Bad substitution
FULLNAME - 39f831fb.enc
FILENAME -
./test.sh: 1: ./test.sh: Bad substitution
FULLNAME - 0bd57df4.enc
FILENAME -
test.shファイルを実行すると機能します。
pi@raspberrypi:~/A6.1 $ ./test.sh 68ff6d19.code
FULLNAME - 68ff6d19.code
CUTNAME - 68ff6d19
ベストアンサー1
GNU Parallelを使用すると、コードを集中化できるようです。
find -name '*.enc' | parallel echo Full:{} Cut:{.}
またはコードがより複雑な場合:
#!/bin/bash
doit() {
FULLNAME="$1"
CUTNAME="$2"
echo "FULLNAME - $FULLNAME"
echo "FILENAME - $CUTNAME"
}
export -f doit
find -name '*.enc' | parallel doit {} {.}