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

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

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

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

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

2回答

1716閲覧

自分のmacで動いていたスクリプトが別のmacで動かない

momokoko

総合スコア38

シェルスクリプト

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

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

2クリップ

投稿2020/06/09 03:49

編集2020/06/09 09:06

ディレクトリ構造

cham-hikioku-high - 2020年02月23日01時06分.jpg - 2020年02月23日01時06分.jpg ~ - 2020年06月08日01時13分.jpg cham-hikioku-low - 2020年02月28日01時06分.jpg - 2020年02月28日12時06分.jpg ~ - 2020年06月08日01時13分.jpg

動かない問題のコード
コードの目的:違う時間帯で撮影された画像を日付ごと一枚にするスクリプト

$ cat ~/tomtools/shdaymakiai.sh #!/bin/bash for i in *;do cd ${i} dirname=$(basename `pwd`) mkdir out-${dirname} ls -1 *.jpg |awk '{print substr($0, 12) " " substr($0, 1, 11)}' |uniq -f 1|awk '{print $2 $1}' |xargs -I{} cp {} out-${dirname} cd .. done

上記のコードを自分のmacで実行するとうまくいくのですが、別のmac(sierra 10.12.6)で実行すると

uniq: stdin: Illegal byte sequence

とエラー出力されます。

試したこと
記事を参考にenv LANG=cを付けました。

$ cat ~/tomtools/shdaymakiai.sh #!/bin/bash for i in *;do cd ${i} dirname=$(basename `pwd`) mkdir out-${dirname} env LANG=c ls -1 *.jpg |env LANG=c awk '{print substr($0, 12) " " substr($0, 1, 11)}' |env LANG=c uniq -f 1|env LANG=c awk '{print $2 $1}' |env LANG=c xargs -I{} cp {} out-${dirname} cd .. done

上記のようにしたところエラーは出なくなりました。
しかし、out-cham-hikioku-high/の画像ファイルは歯抜けになっていました。
うまく行く場合は、2月23日から6月8日まで連日で画像が取得されます。

$ ls out-cham-hikioku-high/ 2020年02月23日01時06分.jpg 2020年03月01日01時07分.jpg 2020年04月01日01時09分.jpg 2020年05月01日01時10分.jpg 2020年06月01日01時12分.jpg ls out-cham-hikioku-low/ 2020年02月27日11時54分.jpg 2020年03月01日01時01分.jpg 2020年04月01日01時03分.jpg 2020年05月01日01時04分.jpg 2020年06月01日01時05分.jpg

検索ワードすらわかない状態です。
ご教授頂けたら嬉しいです。

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

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

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

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

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

guest

回答2

0

「歯抜け」の意味がわかりませんが、ロケールをja_JPからCに変えるとsubstrの文字数の文字の意味が変わるので、文字数位置の調整が居るかと思います。
簡単に言うとバイト単位になると思ってください。「年」「月」「日」などは1文字で3バイトです。

なお、ロケールをCにして実行するなら、export LANG=Cをスクリプト先頭で1回だけ書けばいいです。

Cにするんじゃなくて、日本語の文字コードに合わせた正しいロケールを設定するのも良いかと思います。

投稿2020/06/09 04:08

otn

総合スコア85901

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

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

momokoko

2020/06/09 10:11

回答ありがとうございます! 勉強になりました。 ありがとうございました。
guest

0

ベストアンサー

違う時間帯で撮影された画像を日付ごと一枚にするスクリプト

で提供されている,uniq を使わない方法では期待する結果が得られないのでしょうか?

私の mac では以下の抽出結果になりました.cp コマンドが怒っていますが,結果は得られているように思います.ちなみに,リンク先の回答で提供されているコマンドの ls のオプションが間違っているようです.
ls -l (エル) になっていますが,ls -1 (数字の一)が正しいと思います.

(*'-') < ls 2020年02月24日01時02分.jpg 2020年02月25日01時02分.jpg 2020年02月26日01時02分.jpg destdir 2020年02月24日12時02分.jpg 2020年02月25日12時02分.jpg 2020年02月26日12時02分.jpg (*'-') < ls destdir (*'-') < ls -1 | awk 'NR==1{h=substr($0, 0, 15);print} NR!=1 && substr($0, 0, 15)!=h{h=substr($0, 0, 15);print}' | xargs -I@ cp @ destdir cp: destdir is a directory (not copied). (*;-;)? < ls destdir 2020年02月24日01時02分.jpg 2020年02月25日01時02分.jpg 2020年02月26日01時02分.jpg

投稿2020/06/09 05:36

pied_piper

総合スコア40

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

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

momokoko

2020/06/09 10:10

ありがとうございます! 上記コマンドで動かすことができました! ls -1 の部分をls -F|grep -v /とすることでcp: destdir is a directory (not copied).は出なくなりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問