私は、Mac OS Xの端末で次のことを実行するのに適したコマンドを見つけるためのコマンドライン初心者です。
すべてのファイルを同じディレクトリに配置し、テキストファイルにリストされている選択されたディレクトリファイルのセットを分離して新しいディレクトリに移動したいとします。
.txt ファイルにリストされている選択したファイル名のリストを読みます。
ファイル名で一致するすべての項目を検索
一致するすべてのファイルを隔離し、新しいディレクトリに移動します。
現在のディレクトリで filesring.filetype (またはその両方) を探し、一致するすべてのエントリを新しいディレクトリに移動する次のコマンドを見つけました。
find . -type f -iname "filestring.filetype" -print0 |
xargs -0 -J % mv % ~/NewDirectory/
このコマンドが見つかりtar
ましたが、リストされているすべてのファイル名のアーカイブコピーを作成します。filename.txt
tar -cf - -T filename.txt | (cd /path/to/new/dir && tar -xvf -)
どんな助けでも大変感謝します!
次のソリューションは、信頼できるソースから入手できます。
cat "filename.txt" | xargs -I % mv % ~/NewDirectory/
答え1
これを試してみてください。バッシュと一緒に使用されます。
while read file
do
mv -v -i "$file" ~/NewDirectory/
done < listoffiles.txt
答え2
あなたが提案したソリューションはMac OS X 10.6.8でfind ... xargs
動作します。Bash version 3.2.48(1)-release
mkdir -v -p ~/NewDirectory
find . -type f -maxdepth 1 -iname "*.pdf" -print0 |
xargs -0 -J % mv -i -v % ~/NewDirectory
移動するファイルのフルパスを含むテキストファイルを使用している場合は、テキストファイルに保存されている各ファイルパスがnullバイトで終わっていることを確認してください。これにより、ファイルパスに改行があっても後で心配する必要はありません。
# some tests
mkdir -v -p ~/NewDirectory
find "${PWD}" -type f -maxdepth 1 -print0 > listoffiles.txt
xargs -0 -n 1 ls -l <listoffiles.txt
# use a grep regex filter on file paths
grep -az 'bash' listoffiles.txt | xargs -0 -n 1 ls -l
xargs -0 -n 1 sh -c 'echo mv -v -i "$1" ~/NewDirectory' _ <listoffiles.txt
xargs -0 -J % ls -ld % ~/NewDirectory <listoffiles.txt
xargs -0 -J % mv -i -v % ~/NewDirectory <listoffiles.txt
使用しているコードをデバッグするには、次の手順を実行しますBash
。
#help set
set -Eeuxv -o pipefail +H # for debugging
trap 'printf "%s\n" "$?"; trap - EXIT' EXIT HUP INT QUIT PIPE TERM ERR