状況:
あるフォルダーからサイズが0より大きいすべてのodtファイルを別のフォルダーにコピーしたいと思います。ファイル名には次の文字が含まれています。+%&[(およびスペース。
私の試みは次のとおりです。
#!/bin/bash
mvfunc ()
{
if [ -s "$1" ]; then
cp -n "$1" /home/telas/zztmp/currentfiles/
/usr/bin/truncate -s 0 "$1"
return 0
fi
}
fileslist=$(ls --quoting-style=shell-always /home/telas/zzz/workingfiles/*.odt)
for filename in "$fileslist" ; do
mvfunc "$filename"
done
すべての助けに大いに感謝します!
答え1
パス名の拡張(ワイルドカード)のような外部コマンドに頼るよりも、Bashでls
。
for
ループにワイルドカードが含まれている場合、Bashはデフォルトでワイルドカードを使用するため、特殊文字は与えられた引数をコマンドの代替として解釈して生成されたテキスト文字列に複雑になりません。
--quoting-style=
そしてオプションはGNU lsにのみ適用されるので、コードはよりきれいで移植性に優れています。
#!/bin/bash
mvfunc ()
{
if [ -s "$1" ]; then
cp -n "$1" currentfiles
/usr/bin/truncate -s 0 "$1"
return 0
fi
}
for filename in /home/telas/zzz/workingfiles/*.odt; do
mvfunc "$filename"
done