web-dev-qa-db-ja.com

|とのmvファイルxargs

次のようにして、/ etc/Apache/sites-enabledフォルダーから/ etc/Apache/sites-availableフォルダーに多数のファイル(シンボリックリンクではない)を移動しようとしています。

/etc/Apache2/sites-enabled$ find . -maxdepth 1 -type f | xargs mv {} ../sites-available/

しかし、私はubuntu n00bであり、このエラーが発生しています:

mv: target `./real-file' is not a directory

ここで、「real-file」は開発環境で設定したテストファイルです。私は本番サーバーで他の誰かの混乱を片付けようとしています;-)

14
Rob

findコマンドで-execオプションを試すことができますが、

/etc/Apache2/sites-enabled$ Sudo find . -maxdepth 1 -type f -exec mv {} /etc/Apache2/sites-available \;

ルートが所有するファイルを移動するには、Sudo権限が必要です。

xargsコマンドを使用する場合は、-Iオプションを追加します。

find . -maxdepth 1 -type f | Sudo xargs -I {} mv {} /etc/Apache2/sites-available/
24
Avinash Raj

理想的には、findで-print0を使用する必要があります。そのため、スペースを含むファイル名で問題が発生することはありません。

例えば。これは動作するはずです:

find . -whatever-flags-go-here -print0 | xargs -r0 mv -t target-directory
4
David Goodwin