LSからの出力をキャプチャするか、すべてのファイル名を配列に保存するコマンドを見つけてください。
質問
現在のディレクトリのファイルを一度に1つずつ処理する必要があります。私はの出力を取る方法を探しています ls
また find
結果の値を配列の要素として保存します。これにより、必要に応じて配列要素を操作できます。
解決
正確な質問に答えるには、以下を使用してください。
arr=( $(find /path/to/toplevel/dir -type f) )
例
$ find . -type f
./test1.txt
./test2.txt
./test3.txt
$ arr=( $(find . -type f) )
$ echo ${#arr[@]}
3
$ echo ${arr[@]}
./test1.txt ./test2.txt ./test3.txt
$ echo ${arr[0]}
./test1.txt
ただし、一度に1つずつファイルを処理したい場合は、使用できます find
's -exec
スクリプトがやや単純である場合、またはそのような返品を見つけるものをループすることができる場合:
while IFS= read -r -d $'\0' file; do
# stuff with "$file" here
done < <(find /path/to/toplevel/dir -type f -print0)
他のヒント
for i in `ls`; do echo $i; done;
それよりも簡単になることはできません!
編集:うーん - デニス・ウィリアムソンのコメントによると、できるようです!
編集2:OPは、の出力を解析する方法を具体的に尋ねますが ls
, 、以下のコメンテーターが言ったように、正しい答えは「あなたはそうしない」と指摘したかっただけです。使用する for i in *
代わりに同様です。
実際、現在のディレクトリのファイルにLS/Findを使用する必要はありません。
for loopを使用するだけです。
for files in *; do
if [ -f "$files" ]; then
# do something
fi
done
また、非表示ファイルも処理する場合は、相対オプションを設定できます。
shopt -s dotglob
この最後のコマンドはBashのみで機能します。
やりたいことによっては、Xargsを使用できます。
ls directory | xargs cp -v dir2
例えば。 Xargsは返された各アイテムに行動します。
所属していません StackOverflow