指定のディレクトリ(サブディレクトリ含む)から条件に一致するファイル名を出して処理をしていくスクリプトを作りたい。
findとforを組み合わせて作りましたが、空白スペースが入っているようなファイル(例:aaa aaa.txt)が存在するとうまく処理ができない問題があります。
for file in `find ディレクトリ名 -type f -name '*.txt' 2>/dev/null`; do
調べて見るとやりたいことを実現できそうな記事がありましたが、ここに書いてあるコードを試してみるとエラーになります。
syntax error near unexpected token `<'
コピペミスではないと思いますが、使え無さそうなので他に実現する方法はありませんでしょうか?
追記:参考にしたページのものは動作するという回答を頂いておりますが、やはりこちらの環境では動作しないように思えます。
DockerのCentOSを使っておりそれが問題なのかどうかがわかりませんが、テスト用に作成したスクリプトと環境を記述しておきます。
環境
[root@bbec28a1ab2f ~]# uname -a Linux bbec28a1ab2f 5.4.39-linuxkit #1 SMP Fri May 8 23:03:06 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [root@bbec28a1ab2f ~]# bash --version GNU bash, version 4.4.19(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. [root@bbec28a1ab2f ~]# find --version find (GNU findutils) 4.6.0 Copyright (C) 2015 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Eric B. Decker, James Youngman, and Kevin Dalley. Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
動作テスト用スクリプト
#!/bin/bash while read f; do echo "${file}" done < <(find . -type f)
実行結果
# sh test.sh test.sh: line 5: syntax error near unexpected token `<' test.sh: line 5: `done < <(find . -type f)'
回答3件
あなたの回答
tips
プレビュー