質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

3回答

1610閲覧

shellscript(シェルスクリプト)でファイル名を取得する方法について

EzrealTrueshot

総合スコア388

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2021/05/25 09:31

前提・実現したいこと

フォルダ配下のファイルを for文 で取得して決まった作業を行いたいです。

発生している問題・エラーメッセージ

Windowsから送られてきたこういうファイルがあります。(フォルダパスが名前に入ってしまっているもの。)

root@kaihatsu:/data/# ls 'E:\Data log\20210424\auto$0$0.csv' 'E:\Data log\20210424\auto$0$7.csv' 'E:\Data log\20210427\auto$0$6.csv' 'E:\Data log\20210424\auto$0$1.csv' 'E:\Data log\20210424\auto$0$8.csv' 'E:\Data log\20210427\auto$0$7.csv'

forで読み込んで処理したいのですが・・・

root@kaihatsu:/data/# for i in `find . -maxdepth 1 -type f`;do echo ${i} ;done

問題点:改行されてしまう。

./E:\Data log\20210424\auto$0$0.csv ./E:\Data log\20210424\auto$0$1.csv ./E:\Data log\20210424\auto$0$7.csv . . .

期待値:こうなってほしい。

./E:\Data log\20210424\auto$0$0.csv ./E:\Data log\20210424\auto$0$1.csv ./E:\Data log\20210424\auto$0$7.csv

補足情報(FW/ツールのバージョンなど)

Ubuntu18.04

最終目的

順番ずつファイルを読み込んで、sed で置換をしたいのです。
for文でまわしたときに、改行されないいい方法をご存知の方いらっしゃいましたらアドバイスいただけませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

環境変数IFSで、文字列をトークンとして分割するような処理に対してのセパレータ文字を任意に設定できます。
デフォルトでは、空白、タブ、改行が設定されています。
今回は空白で区切らないようにしたいので、改行のみに設定します。

sh

1IFS=$'\n'; for i in `find . -maxdepth 1 -type f`;do echo ${i} ;done 2 3# output 4./E:\Data log\20210424\auto$0$2.csv 5./E:\Data log\20210424\auto$0$0.csv 6./E:\Data log\20210424\auto$0$1.csv 7./E:\Data log\20210424\auto$0$3.csv 8

私の環境(Win10 WSLのubuntu)ではcatでも問題なく動作しました。

投稿2021/05/25 10:11

hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EzrealTrueshot

2021/05/25 10:16

ありがとうございます! IFS=$'\n'; for i in `find . -maxdepth 1 -type f`;do ls -althr ${i} ;done でも、無事に ls ができました。 あとは sed で置換しようとおもいます。 ありがとうございました!
guest

0

sedしたいだけであれば以下のようなコマンドはいかがでしょう?

bash

1find . -type f -print 0 | xargs --null -n 1 sed 's/SRC_TEXT/DEST_TEXT/g'

SRC_TEXTDEST_TEXT の部分にはそれぞれ置換対象の文字列、置換後の文字列を指定します。

投稿2021/05/26 03:18

genzouw

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問の件はファイル名に空白が含まれるのが原因ですが、ファイル名に空白が含まれても改行が含まれないのなら、以下のように read で読めばよいかと

find . -maxdepth 1 -type f | while read i ; do echo "$i" ; done

投稿2021/05/25 10:02

編集2021/05/25 10:03
sigsegv

総合スコア895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EzrealTrueshot

2021/05/25 10:10

find . -maxdepth 1 -type f | while read i; do ls -althr ${i};done sedで置換を試す前に、lsコマンドで確認しようとしたのですが、 ls: cannot access './E:\Data': No such file or directory と表示されてしまい、どうやら認識できていないようです; やはり、空白が原因なのでしょうか?
otn

2021/05/25 10:17

回答をよく読みましょう。 ls -althr "${i}" です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問