Jupyter で for ループを使用して Linux の find コマンドを書く方法

Jupyter で for ループを使用して Linux の find コマンドを書く方法

次のように、Jupiter 上の Linux ターミナル コマンドを使用して、「a」という名前のリストにファイル名のリストを表示できます。

a=!find . -type f \! -name '*.*' -print

拡張子のないファイル名にするには、Linux ターミナルで対応するコマンドを実行します。

find . -type f -exec sh -c '
    for pathname do
        pathname=$( basename "$pathname" )
        printf "%s\n" "${pathname%.*}"
    done' sh {} +

しかし、上記のような名前「a」を割り当てて、Jupyter でこのコマンドを実行するにはどうすればよいでしょうか。以下のコードは機能しませんでした。

a=!find . -type f -exec sh -c '
        for pathname do
            pathname=$( basename "$pathname" )
            printf "%s\n" "${pathname%.*}"
        done' sh {} +

行のインデントを変更してみましたが、構文エラーが発生したり、何も表示されませんでした。Jupiter の for ループのコマンド ラインを検索したところ、'!' はおそらく別の場所にあるはずです。どうすれば動作させることができますか?

答え1

同様の問題を抱えている人がいるかもしれないので、私は別の方法でこの問題を解決しました。私はコマンドラインを使用しました a=!find . -type f \! -name '*.*' -print

これにより、拡張子付きのファイル名のリストが作成されました。各要素から拡張子を削除しました。

files = [os.path.splitext(fname)[0] for fname in a]

関連情報