
findコマンドで、深い階層にあるファイルを一階層上へ移動するfindコマンド記述方法を探しています。
/home/user1/text/2007/01/06/text/aaa.txt を
/home/user1/text/2007/01/06/aaa.txt へ移動するのが目的です。
ファイルの格納状況は、
/home/user1/text/[1983-2007]/[01-12]/[01-31]/text/
という構造のディレクトリに*.txtが格納されています。
suse10.0, bashです。よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
> -execを介してコマンド発行は可能でしょうか?
結論から言うと,できますが,実行はかなり遅くなります.
今回初めて,find のソースを少し覗いてみました.
(詳しく追いかけたわけではありませんが.)
どうやら -exec ではシェルを起動している様子なく,
直接コマンドを呼び出しているようです.
それを確認するため,シェルコマンドである alias を -exec に指定して
find . -exec alias \;
とやってみると,予想通り次のようになりました.
find: alias: そのようなファイルやディレクトリはありません
find: alias: そのようなファイルやディレクトリはありません
find: alias: そのようなファイルやディレクトリはありません
(以下略)
したがって -exec の引数に,シェルの構文である `…` を書いても実行されるわけがありません.
(私も今回初めて知りました.今まで (たまに) 無駄な努力をしてはあきらめていました.(T_T))
どうしても -exec でシェルの機能を使いたければ,次のようにすれば可能です.
find /home/user1/text -name '*.txt' -type f -exec bash -c 'mv {} `dirname {}`/..' \;
ただしこの方法では,ファイルが1つ見つかるたびに mv だけでなく
bash が起動されるので遅くなります.さらに,bash が起動されるたびに
~/.bashrc が実行されるので,これが長いと最悪です.
! なるほど~。
幸か不幸か、.bashrcの実行による遅延が、当方環境では少なかったようで、思ったほど長くはない処理時間で済みました。
今回のnoocyte様のご教示は、findについての理解のみならず、
理解する手順まで、頂いたようでとても有り難いものでした。
-exec bash(sh) -c '~~' \;
これは、他のコマンドへの転用も効きそうですので、勉強したいと思います。
#2で、教示頂いたものと合わせて勉強、運用に役立たせていただこうと思います。
ありがとうございました。
No.4
- 回答日時:
#3 に補足します.
> さらに,bash が起動されるたびに ~/.bashrc が実行される
bash の代わりに sh (bash へのシンボリックリンク) を使えば,
~/.bashrc は実行されなくなります.
bash のマニュアルを読むと,-exec sh -c '…' \; の代わりに
-exec bash --norc -c '…' \; でも ~/.bashrc は実行されなく
なるはずですが,実際やってみるとなぜか実行されます.(?_?)
bash のマニュアル
http://www.linux.or.jp/JM/html/GNU_bash/man1/bas …
noocyte様へ、ありがとうポイントを30点付与しようと思いましたが、ダメなようですね^^;。
付与基準は、まずQ&A的に有効であり、突っ込んだ当方の疑問であったfindコマンドexecオプションがアドバンテージであると個人的に決めつけますと、
#3 20P, #2 10P
ということになりました。
#1様もレスを頂きありがとうございました。
おかげで質問の意図をハッキリさせることとなったからです。
No.2
- 回答日時:
例えば *.txt ファイルだけを1階層上に移動したいのなら,
find /home/user1/text -name '*.txt' -type f -printf "mv %p %h/..\n" > aaa.sh
とすれば,aaa.sh に次のようなシェルスクリプトができます.
mv /home/user1/text/2007/01/28/text/aaa.txt /home/user1/text/2007/01/28/text/..
mv /home/user1/text/2007/01/28/text/bbb.txt /home/user1/text/2007/01/28/text/..
mv /home/user1/text/2007/01/28/text/ccc.txt /home/user1/text/2007/01/28/text/..
:
:
:
この内容でよければ,次のようにしてこのスクリプトを実行すれば OK.
bash aaa.sh
なお,以上の方法でうまくいくことが確認できれば,上記の2つのコマンドは次の
ように1行にまとめられます.
find /home/user1/text -name '*.txt' -type f -printf "mv %p %h/..\n" | bash
find のマニュアル
http://www.linux.or.jp/JM/html/GNU_findutils/man …
この回答への補足
ありがとうございます。
下記のエラーとなるコマンドのように
find /home/user1/text -name '*.txt' -type f -exec mv %p %h/.. \;
find /home/user1/text -name '*.txt' -type f -exec mv {} `dirname {}`/.. \;
※ \,""等でのエスケープしても動作しない。
-execを介してコマンド発行は可能でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 【Windowsのquery=user:●●;date:先週から;ファイル操作ログの該 1 2023/05/23 18:45
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- Excel(エクセル) Powershell エクセル検索 完全一致の方法 1 2022/06/05 20:19
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- PHP php ログイン 1 2022/11/01 00:24
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OSXで常に最後に表示される文字...
-
Fedora Core 2 のコマンド
-
大量のtxtファイルを一つのtex...
-
find で探したファイルを探した...
-
【DOSコマンド】for文の中で変...
-
バッチで特定文字が含まれる先...
-
UNIXで、ディレクトリを比較し...
-
^M削除方法、教えてください。
-
【Linux】findコマンドの表示順
-
Perl:あるファイル名が指定の...
-
viで、2つのファイルを一つの...
-
シェルスクリプトでエラーが出ます
-
ubuntuで、テキストの文字を別...
-
Dirコマンドでフォルダ内ファイ...
-
grepでの日本語検索
-
SONYの音楽ソフト「x-アプリ」...
-
Linux環境 grepで改行コード(CR...
-
至急です、Ubuntuに詳しい方助...
-
pingは正常なのにtracerouteで...
-
エクセルの表にヘンな枠が・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シェルスクリプトでエラーが出ます
-
【DOSコマンド】for文の中で変...
-
スラッシュ"/"を削除したい
-
renameコマンドでファイル名か...
-
UNIXで、ディレクトリを比較し...
-
バッチで特定文字が含まれる先...
-
【Linux】findコマンドの表示順
-
Linuxで*をつかってファイル移...
-
*.txtファイルの最終行だけ参照...
-
DOSでテキストファイルの中のあ...
-
OSXで常に最後に表示される文字...
-
BATファイルによるfcコマンドで...
-
○行目から□行目だけを表示する...
-
dosバッチを使用して昇順に
-
DOSバッチにて外のファイルの指...
-
unixのdiffコマンドの動作について
-
コマンドプロンプト net user...
-
ファイルの先頭に文字を追加す...
-
shellでsmbclientでファイル転送
-
行の挿入をおこなう。awk?
おすすめ情報