100個のログファイルを含むフォルダがあり、その一部にはデータがあり、一部にはデータがありません。データを含むファイルを選択し、「goodfiles.txt」というテキストファイルに名前を保存するスクリプトがあります。テキストファイルのファイルを読み、他のフォルダに移動する方法を知りたいです。私はこれを試しましたが、cat /root/testing2/goodfiles.txt | xargs mv -f /root/testing2/moved/
次のエラーが発生しました。
mv:ターゲット(log1508.log)は、mv:ディレクトリまたはファイルを移動するディレクトリでなければなりません。
誰でも私を助けることができますか?
答え1
以下は少し異なりますが、概念的には単純なアプローチです(パイプを除く)。
for fileName in `cat goodfiles.txt`; do mv $fileName /root/testing2/moved/; done
答え2
--replaceオプションを使用して、xargsが置き換える部分を変更し、代替文字列を指定できることを覚えておくと便利です。それ以外の場合は、行を最後に追加します。
ほぼ同じことができた
cat filelist |xargs --replace='{}' mv {} ./targetdir/
たぶん試してみてください。
cat /root/testing2/goodfiles.txt |xargs --replace '{}' /root/testing2/moved
答え3
複数のソースを単一のターゲットに移動するために、正確に必要なオプションと-f
GNUオプションを混同しているようです。mv
-t
xargs
mv [OPTION]... -t DIRECTORY SOURCE...
plainはxargs
入力をスペースで区切られた引数で除算するため、ファイル名にスペースが含まれているとコマンドは中断されます。同時にそれもウルムチ大学。
だから
xargs -d'\n' mv -t /root/testing2/moved/ </root/testing2/goodfiles.txt