Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2722

ls の実行結果を for 文で処理するワンライナー

$
0
0

やりたいこと

1階層上に複数あるディレクトリの中にあるファイルを今いるディレクトリに全てコピーすること。

つまり、これを↓

Before
$ tree -c.├── a
│   └── a.text
├── b
│   └── b.text
└── c
    └── c.text

こうしたい↓

After
$ tree -c.├── a
│   └── a.text
├── b
│   └── b.text
├── c
│   └── c.text
├── a.text
├── b.text
└── c.text

そのときに『 ls の実行結果を for 文で処理するワンライナーがあればうまく行くのに、、、』と思ったので、それを試してみた備忘録になります。

ls の実行結果を for 文で処理する方法

複数行の場合

複数行
$ for a in$(ls .);do
   echo$adone(実行結果)
a
b
c

echo $aが実行結果に対して行いたい処理。

ワンライナーの場合

ワンライナー
$ for a in$(ls .);do echo$a;done(実行結果)
a
b
c

echo $a;;を忘れずに。

ワンライナーで for 文を2週することも可能

ワンライナーでfor文を2週
for a in$(ls .);do for b in$(ls$a);do echo"$a/$b";done;done(実行結果)
a/a.text
b/b.text
c/c.text

やりたいことをやってみる

やりたいこと:1階層上に複数あるディレクトリの中にあるファイルを今いるディレクトリに全てコピーする

失敗例

$ for a in$(ls .);do cp-p"$a/*".;done(実行結果)
cp: a/*: No such file or directory
cp: a.text/*: Not a directory
cp: b/*: No such file or directory
cp: b.text/*: Not a directory
cp: c/*: No such file or directory
cp: c.text/*: Not a directory

なんか怒られた、、、
こういう書き方だと*(ワイルドカード)が展開されないみたいですね。。。

成功例

ワイルドカードを使わずに素直に2周させてみました。

$ for a in$(ls .);do for b in$(ls$a);do cp-p"$a/$b" .;done;done$ tree -c.├── a
│   └── a.text
├── b
│   └── b.text
├── c
│   └── c.text
├── a.text
├── b.text
└── c.text

いけた!


Viewing all articles
Browse latest Browse all 2722

Trending Articles