ファイル名を含むファイルがあります。例えば:
/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/
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/
ファイル名が比較的正常であると想定します(改行や変な文字はありません)。
while read file; do mv "$file" /app/dest/; done < list.txt
奇妙なファイル名を処理するには(ファイル名に改行がある場合は中断します):
while IFS= read -r file; do mv "$file" /app/dest/; done < list.txt
for i in $(cat /tmp/list.txt); do mv "$i" /app/dest/; done
ファイルから直接読み取る純粋なxargs
xargs -l -i < flist mv -v {} /app/dst
編集1-以下の@Anthonのコメントの後に、
xargs -I{} < flist mv -v {} /app/dst
mv `cat /tmp/list.txt` /app/dest/
(開始時のスペースは無視されます)