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]

関連情報