「xargs」の引数の前にスペースが付くのを防ぐ方法は?

「xargs」の引数の前にスペースが付くのを防ぐ方法は?

サブディレクトリにコンテンツが保存されていないアーカイブを別のファイルでいっぱいのディレクトリに抽出しました。

この問題を解決するには、アーカイブを新しい空のディレクトリに抽出し、ここにリストされているディレクトリを使用して最初のディレクトリから難読化されたファイルを削除しようとします。ファイルは最初に "/usr/src/packages" ディレクトリに抽出され、新しいディレクトリは~/Programs/DBeaver.

vfclists@hp01:~/Programs/DBeaver$ ls -l
total 216
-rw-r--r--  1 vfclists vfclists 48943 Oct 23 23:28 artifacts.xml
drwxr-xr-x  4 vfclists vfclists  4096 Oct 23 23:28 configuration
-rwxr-xr-x  1 vfclists vfclists 79058 Oct 23 22:58 dbeaver
-rw-r--r--  1 vfclists vfclists   206 Oct 23 23:28 dbeaver.ini
-rw-r--r--  1 vfclists vfclists  7919 Oct  9 14:05 dbeaver.png
drwxr-xr-x 23 vfclists vfclists  4096 Oct 23 23:28 features
-rwxr-xr-x  1 vfclists vfclists 35021 Oct 23 22:58 icon.xpm
drwxr-xr-x  2 vfclists vfclists  4096 Oct 23 23:28 licenses
drwxr-xr-x  4 vfclists vfclists  4096 Oct 23 23:28 p2
drwxr-xr-x  6 vfclists vfclists 20480 Oct 23 23:28 plugins
-rw-r--r--  1 vfclists vfclists  1791 Oct 23 23:28 readme.txt
vfclists@hp01:~/Programs/DBeaver$ 

だから私が望むのはlsxargsの出力をパイプすることですが、コマンドを実行するとファイル名の前にスペースが追加されるため、次のようなテスト出力が表示されます。

vfclists@hp01:~/Programs/DBeaver$ ls  | xargs -n 1 echo rm /usr/src/packages/
rm /usr/src/packages/ artifacts.xml
rm /usr/src/packages/ configuration
rm /usr/src/packages/ dbeaver
rm /usr/src/packages/ dbeaver.ini
rm /usr/src/packages/ dbeaver.png
rm /usr/src/packages/ features
rm /usr/src/packages/ icon.xpm
rm /usr/src/packages/ licenses
rm /usr/src/packages/ p2
rm /usr/src/packages/ plugins
rm /usr/src/packages/ readme.txt

ディレクトリとファイルを区別する問題もありますが、まずその問題に対処したいと思います。

rm -rf更新:この場合、重要ではないファイルやディレクトリに対して機能することがわかったので、rm xxxx交換しました。rm -rf xxxx

ベストアンサー1

引数を表示する場所を使用してください-I {}{}

xargs -I {} -n 1 echo rm /usr/src/packages/{}

(一般的な{}、以外のものを使用しても構いません。){}

これがなければ、xargs入力を追加引数として追加するだけで、どこにでもスペースを追加することは問題になりません。コマンドは入力を別の引数として受け取ります。

特にファイルとディレクトリを区別する場合は、find代わりに使用する必要があります。ls

次のようにファイルを削除します。

find . -type f -exec rm /usr/src/packages/{} \;

おすすめ記事