inodeで複数のファイルを操作する

inodeで複数のファイルを操作する

\作業したいバックスラッシュを含むファイルが膨大ですが、次のような作業を試みるたびに:

$ ls -li
2036553851 -rw-rw-r-- 1 user user 6757 May 20 00:10 Simplex_config\\B1:B3\\_1.csv
2036553766 -rw-rw-r-- 1 user user 6756 May 20 00:07 Simplex_config\\B1:B3\\_2.csv
2036554099 -rw-rw-r-- 1 user user 6785 May 20 00:20 Simplex_config\\B1:B3\\_3.csv
2036553974 -rw-rw-r-- 1 user user 6785 May 20 00:15 Simplex_config\\B1:B3\\_4.csv

$ find . -type f -name 'Simplex*.csv' | xargs cat > looksee.txt

エラーが発生しますNo such file or directory。ファイル名を変えてそうするか悩みもしてみましたが、もっと簡単な解決方法がないかと思いますinode

私は次のことを思い出しました。

#!/bin/sh

if [ -f looksee.txt ]; then
   rm -rf looksee.txt
fi

ls -i Simplex_config*.csv | awk '{ print $1 }' > inode_list.txt

while IFS= read -r inode;
do
  find . -inum $inode -exec cat {} \; >> looksee.txt
done < inode_list.txt

しかし、これは非常に面倒な作業なので、出力を解析し、それを1行プログラムの他のコマンドにパイプする方法を探したいと思います。ls -i Simplex_config*.csvそのようなオプションを使用できますか?

ベストアンサー1

1.

find . -type f -name 'Simplex*.csv' -print0 | xargs -0 cat > looksee.txt

~からmanxargs

- 無効
-0
入力は空白ではなくヌル文字で終わり、引用符とバックスラッシュは特別ではありません(各文字は文字通り使用されます)。他のパラメーターと同様に処理されるファイル終了文字列を無効にします。入力にスペース、引用符、またはバックスラッシュを含めることができる場合に便利です。 GNUfind -print0オプションはこのモードに適した入力を生成します。

2.

find . -type f -name 'Simplex*.csv' -exec cat {} + > looksee.txt

~から人々が見つけた

- 注文を実行する。
コマンドを実行します。状態 0 が返されると true です。 findの次の引数は、次の引数が;見つかるまでコマンドの引数として扱われます。文字列は、{}いくつかのバージョンの find のように、別の引数だけでなく、コマンドの引数に現れる現在のファイル名に置き換えられます。\シェル拡張から保護するために、両方の設定をエスケープまたは引用する必要があるかもしれません。一致するファイルごとに指定されたコマンドが一度実行されます。このコマンドは起動ディレクトリで実行されます。使用中に避けられない安全上の問題があります。-実現する対策を講じる必要があります。-execdir代わりにオプション。

- コマンドの実行{}+
この亜種-実現するジョブは選択したファイルに対して指定されたコマンドを実行しますが、コマンドラインは選択した各ファイル名を最後に追加することによって構成されます。コマンドの総呼び出し数は、一致するファイルの数よりはるかに少なくなります。コマンドラインは、xargsがコマンドラインを作成するのとほぼ同じ方法で作成されます。{}このインスタンスはコマンドに 1 つだけ許可されます。このコマンドは起動ディレクトリで実行されます。

三。

cat Simplex_config* > looksee.txt

レベルサブパスが1つしかない場合。

おすすめ記事