次のファイル名を含むファイルがありますfile1.txt
。
filea.txt
fileb.txt
filec.txt
file1.txt
リストされたファイルを別のフォルダにコピーしたいです。どのUNIXコマンドが使用されますか? (シェルはksh88
関連しています)。
答え1
あなたの形式では、ファイル名に改行文字がないと仮定していますが、これは理想的ではありません(ファイル名に改行文字が許可されています)。また、あなたの殻について言及していません。ただし、POSIXシェルでは次のことができます。
while IFS= read -r file; do
cp -- "$file" new_dir/
done < file
ただし、bashでは、すべてのエントリを一度にcpに渡す方が速くなる可能性があります(以下にある限りARG_MAX
)。
files=()
while IFS= read -r file; do
files+=( "$file" )
done < file
cp -- "${files[@]}" new_dir/
...またはbash4+がある場合も同様です。
mapfile -t files < file
cp -- "${files[@]}" new_dir/
答え2
GNUツールの使用:
xargs -rd '\n' cp -t /dest/folder -- < file1.txt
POSIX的に:
sed 's/./\\&/g' < file1.txt | xargs sh -c 'exec cp -- "$@" /dest/dir' sh