web-dev-qa-db-ja.com

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

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

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

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

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

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

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

mv-tオプションがない(GNU mvと仮定):

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

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

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

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

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

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

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

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

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

while IFS= read -r file; do mv "$file" /app/dest/; done < list.txt 
6
terdon
for i in $(cat /tmp/list.txt); do mv "$i" /app/dest/; done
3
mavillan

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

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

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

xargs -I{} < flist  mv -v {} /app/dst
1
X Tian
mv `cat /tmp/list.txt` /app/dest/

(開始時のスペースは無視されます)