findをxargsにパイプするときに、異なる場所にある同じ名前のファイルを変更することはできません

user1028270

Macでgnuツールを使用

何が起こっているのかわかりませんが、findの出力をxargsにパイプすることには、異なる場所のディレクトリ構造に表示される同じ名前のファイルに触れる際に問題があるようです。

私のディレクトリ:

dir
-- dirone
---- myfile.txt
---- otherfile.txt
-- dirtwo
---- myfile.txt

このコマンドを実行すると、アクセス許可が拒否されたというエラーが表示されます。

find dir -name "myfile.txt" | xargs -0 -I FILE sh -c "ls FILE"

ファイルをタッチ/ lsすることすらできません。ある「otherfile.txt」にアクセスしても問題ありません

find dir -name "otherfile.txt" | xargs -0 -I FILE sh -c "ls FILE"

何らかの競合状態などはありますか?最終的にはでファイルを変更したいのですが、ファイルを変更することsed -iすらできません。完全なファイルパスがxargsに渡されているため、理解できません。完全なパスが必要で、同じ名前が問題にならないという事実がありますか?

編集:OKはまだ私がパーマエラーを受け取っていた理由を理解していませんが、これはうまくいくようです:

find dir -name "otherfile.txt" -type file -print0 | xargs -0 -I FILE sh -c "ls FILE"

削除するだけ-0でもうまくいきましたが、どちらの方法が良い/安全かわかりませんか?

アンディ・ダルトン

ディレクトリ設定を考えると:

$ find dir
dir
dir/dirtwo
dir/dirtwo/myfile.txt
dir/dirone
dir/dirone/myfile.txt
dir/dirone/otherfile.txt

私があなたの(元の)コマンドを使用する場合、私はあなたの元の問題を再現することができます:

$ find dir -name "myfile.txt" | xargs -0 -I FILE sh -c "ls FILE"
dir/dirtwo/myfile.txt
sh: line 1: dir/dirone/myfile.txt: Permission denied
$

何が起こっているのかをよりよく理解するために、そのコマンドのバリエーションを試してみましょう。

$ find dir -name "myfile.txt" | xargs -0 -I FILE echo -FILE-
-dir/dirtwo/myfile.txt
dir/dirone/myfile.txt
-

FILEが単一のトークンに展開されていることに注意してくださいdir/dirtwo/myfile.txt\ndir/dirone/myfile.txt\nどうして?xargsトークンは(-0スイッチを使用してNULで区切られ、2つのファイル名の間にNUL文字がないことを伝えためです

それで、元のコマンドに戻ると、次のようになります... | xargs -0 -I FILE sh -c "ls FILE"

ls dir/dirtwo/myfile.txt
dir/dirone/myfile.txt

したがって、1つをリストし、2つ目を実行しようとします。そのため、「アクセスが拒否されました」というメッセージが表示されます。2番目のファイルは実行可能ではありません。

お気づきのとおり、に-print0オプションを追加findすると問題が解決します。このオプションを使用するfindと、トークンの間にNUL文字が挿入されます。xargsこの-0オプションを使用すると、同じ文字が期待されます。同様に、ちょうど残し-0のオフオプションをxargs両方のために解き問題をfindxargs、デフォルトでは区切り文字として使用する空白。

-print0および-0オプションは、ファイル名が(スペースはトークン区切り文字と見なされるデフォルトの動作を壊す)、スペースを含めることができる場合に便利です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

各「ファイル」の名前を「file.text」に変更することはできません(xargsを使用)

分類Dev

nginxで特定の.phpファイルの名前を.html名に変更することはできません

分類Dev

Synologyの共有フォルダの場所にあるrename-itemを使用してサブディレクトリ内のファイルの名前を変更することはできません

分類Dev

wgetで名前を変更するときに同じファイル名を取得する

分類Dev

異なる名前の複数のファイルの名前を同じ名前と異なる番号に変更します

分類Dev

Vbsでtxtファイルを作成するときに存在する場合は名前を変更します

分類Dev

ファイルに名前を付けることができない POSIX パス名はありますか?

分類Dev

2つのボタンに同じ外部jsファイルを使用することはできません(異なるビューで)

分類Dev

なぜgitは名前と場所が異なるファイルに同じハッシュを割り当てるのですか?

分類Dev

Pythonを使用して単一のファイルの名前を変更することはできません

分類Dev

ファイル入力方法を使用しているときにファイル名、つまりzipファイルを取得できませんでした。o/ pファイルタイプはファイルであり、同じ名前のzipファイルが必要です。

分類Dev

名前を変更またはコピーしたい場合にのみ、Pythonが突然ファイルを見つけることができません

分類Dev

異なるスイッチケースの変数に同じ名前を付けることはできませんか?

分類Dev

モジュールとメインプログラムを同じファイルに入れてコンパイルすることはできません

分類Dev

DownloadManagerクラスでダウンロードしたファイルの名前を動的に変更することはできません

分類Dev

最初のクリック後に iFrame スタイルを変更することはできますか (同じドメイン上ではありません)

分類Dev

rename():ラッパータイプ間でファイルの名前を変更することはできません

分類Dev

ファイルの名前を.js.erbに変更すると、JavaScript内にerbを書き込むことができますが、erb内にjavascriptを書き込むことはできません。

分類Dev

OSError:[Errno66]複数のファイルの名前を変更するときにディレクトリが空ではありません

分類Dev

VSCode Dart / Flutterは、ファイルの名前を変更するときにインポートの名前を変更しません

分類Dev

findを使用して同じ名前の異なるディレクトリにあるファイルの名前を変更する方法

分類Dev

ペーパークリップを使用すると、親指に元のファイル名とは異なるファイル名を使用できますか?

分類Dev

xargs + curl "Failedwriting body"(複数の結果をファイルに保存することはできません)

分類Dev

djangoでのアップロード時にファイルの名前と保存場所を変更する方法

分類Dev

アナライザーは、名前空間がファイルの場所と適切に一致することを検証できますか

分類Dev

Git:名前を変更したファイルはJavaでコンパイルするときに競合を引き起こします

分類Dev

C#でxmlファイルを保存するときに特定の名前と場所を設定する

分類Dev

行番号と変更されたファイル名のみを「gitdiff」にすることはできますか?

分類Dev

同じ名前で他のファイルを変更できない場合、他のCファイルで同じ名前の複数の関数を使用するにはどうすればよいですか?

Related 関連記事

  1. 1

    各「ファイル」の名前を「file.text」に変更することはできません(xargsを使用)

  2. 2

    nginxで特定の.phpファイルの名前を.html名に変更することはできません

  3. 3

    Synologyの共有フォルダの場所にあるrename-itemを使用してサブディレクトリ内のファイルの名前を変更することはできません

  4. 4

    wgetで名前を変更するときに同じファイル名を取得する

  5. 5

    異なる名前の複数のファイルの名前を同じ名前と異なる番号に変更します

  6. 6

    Vbsでtxtファイルを作成するときに存在する場合は名前を変更します

  7. 7

    ファイルに名前を付けることができない POSIX パス名はありますか?

  8. 8

    2つのボタンに同じ外部jsファイルを使用することはできません(異なるビューで)

  9. 9

    なぜgitは名前と場所が異なるファイルに同じハッシュを割り当てるのですか?

  10. 10

    Pythonを使用して単一のファイルの名前を変更することはできません

  11. 11

    ファイル入力方法を使用しているときにファイル名、つまりzipファイルを取得できませんでした。o/ pファイルタイプはファイルであり、同じ名前のzipファイルが必要です。

  12. 12

    名前を変更またはコピーしたい場合にのみ、Pythonが突然ファイルを見つけることができません

  13. 13

    異なるスイッチケースの変数に同じ名前を付けることはできませんか?

  14. 14

    モジュールとメインプログラムを同じファイルに入れてコンパイルすることはできません

  15. 15

    DownloadManagerクラスでダウンロードしたファイルの名前を動的に変更することはできません

  16. 16

    最初のクリック後に iFrame スタイルを変更することはできますか (同じドメイン上ではありません)

  17. 17

    rename():ラッパータイプ間でファイルの名前を変更することはできません

  18. 18

    ファイルの名前を.js.erbに変更すると、JavaScript内にerbを書き込むことができますが、erb内にjavascriptを書き込むことはできません。

  19. 19

    OSError:[Errno66]複数のファイルの名前を変更するときにディレクトリが空ではありません

  20. 20

    VSCode Dart / Flutterは、ファイルの名前を変更するときにインポートの名前を変更しません

  21. 21

    findを使用して同じ名前の異なるディレクトリにあるファイルの名前を変更する方法

  22. 22

    ペーパークリップを使用すると、親指に元のファイル名とは異なるファイル名を使用できますか?

  23. 23

    xargs + curl "Failedwriting body"(複数の結果をファイルに保存することはできません)

  24. 24

    djangoでのアップロード時にファイルの名前と保存場所を変更する方法

  25. 25

    アナライザーは、名前空間がファイルの場所と適切に一致することを検証できますか

  26. 26

    Git:名前を変更したファイルはJavaでコンパイルするときに競合を引き起こします

  27. 27

    C#でxmlファイルを保存するときに特定の名前と場所を設定する

  28. 28

    行番号と変更されたファイル名のみを「gitdiff」にすることはできますか?

  29. 29

    同じ名前で他のファイルを変更できない場合、他のCファイルで同じ名前の複数の関数を使用するにはどうすればよいですか?

ホットタグ

アーカイブ