ファイル内のリストごとにファイルを移動する(先頭に空白がある)


11

ファイル名を含むファイルがあります。例えば:

/tmp/list.txt (各行の先頭にスペースがあります):

  /tmp/file.log
  /app/nir/home.txt
  /etc/config.cust

にリストされ/tmp/list.txtているすべてのファイルを1行で移動します/app/dest

したがって、次のようになります。

cat /tmp/list.txt | xargs mv /app/dest/

回答:


21

(GNUを想定して)の-tオプションがありません。mvmv

cat /tmp/list.txt | xargs mv -t /app/dest/

以下(X Tianの回答に触発された):

xargs mv -t /app/dest/ < /tmp/list.txt

先頭(および末尾)のスペースは削除されます。ファイル名内のスペースは問題を引き起こします。

ファイル名にスペース、タブ、引用符、バックスラッシュがあるxargs場合は、GNU を想定して次のように使用できます。

sed 's/^ *//' < /tmp/list.txt | xargs -d '\n' mv -t /app/dest/

答えてくれてありがとう 。これで、名前に[!]が含まれる多数のファイルのリストを作成し、次のようにして別のフォルダに移動できます。grep -e "。[!]]" | tee 001.txt; sed 's / ^ * //' <001.txt | xargs -d '\ n' mv -t / destinypath /
犬風

6

ファイル名が比較的正常であると想定します(改行や奇妙な文字はありません)。

while read file; do mv "$file" /app/dest/; done < list.txt 

奇妙なファイル名を処理するには(ファイル名に改行がある場合は中断します):

while IFS= read -r file; do mv "$file" /app/dest/; done < list.txt 

こんにちはterdon、csvファイルでの一致に基づいてフォルダーを新しいディレクトリに移動する方法は?これを手伝っていただけませんか[ unix.stackexchange.com/questions/433068/…ありがとうございました!!
user3351523 2018年

@ user3351523あなたの質問はクローズされました。ランダムな人に助けを求めても、それは変わりません。代わりに、質問を編集し、複製のソリューションがどのように役に立たなかったかを説明してください。「うまくいかなかった」場合は、どのように失敗したかを説明します。解決策はあなたのために働くはずなので、あなたがそれらを試したときに何が起こるかを説明する必要があります。
terdon

私はそうしました。ご覧になれます。
user3351523 2018年

@ user3351523あなたは、だまされた解決策が失敗する理由を説明していません。そして、あなたはあなたが得た答えがどのように失敗するかを説明していません。使用する必要があるだけかもしれcp -Hrませんが、OSX cpがそれをサポートしているかどうかはわかりません。
terdon


1

ファイルから直接読み取る純粋なxargs

xargs -l -i < flist  mv -v {} /app/dst

編集1-以下の@Anthonのコメントの後、

xargs -I{} < flist  mv -v {} /app/dst

1
-i非推奨であり、それ、またはその置換-Iは-l/を意味し--max-lines=1ます。そして、mvファイルごとに個別に実行されます。
Anthon 2014

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.