我有5个名为file1.txt,file2.txt ... file5.txt的文件,我想将每个文件移动到一个名为dir1,dir2 ... dir5的相应目录中。
所以file1.txt移动到dir1,file2.txt移动到dir2,依此类推。
有没有办法在命令行的一行中执行此操作,可能使用mv
和xargs
?
我只是建议xargs
,因为我非常喜欢Robert Gamble提供的answer问题,询问如何将一个文件复制到多个目录。
echo dir1 dir2 dir3 | xargs -n 1 cp file1
答案 0 :(得分:0)
我个人更喜欢依赖于public class TextGroup extends LinearLayout {
EditText edit0;
EditText edit1;
EditText edit2;
EditText edit3;
public TextGroup(Context context, AttributeSet attrs) {
super(context);
View view = LayoutInflater.from(context).inflate(R.layout.edit_text_special, null);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
edit0 = (EditText) view.findViewById(R.id.edit_text0);
edit1 = (EditText) view.findViewById(R.id.edit_text1);
edit2 = (EditText) view.findViewById(R.id.edit_text2);
edit3 = (EditText) view.findViewById(R.id.edit_text3);
edit1.addTextChangedListener(watcher);
this.addView(view, lp);
}
TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable editable) {
if ( edit1.getText().length() >= 3) {
edit3.setText(String.valueOf(edit1.getText().toString().charAt(2)));
}
if ( edit1.getText().length() >= 2) {
edit2.setText(String.valueOf(edit1.getText().toString().charAt(1)));
edit1.setText(String.valueOf(edit1.getText().toString().charAt(0)));
}
}
};
}
循环的解决方案,例如:
for
这可以通过for n in {1..5}; do echo mv -- "file$n.txt" "dir$n/"; done
# ^^^^ remove that
完成,但我发现解决方案不那么优雅:
xargs
答案 1 :(得分:0)
你可以采用另一种方式,如果它不一定是连续整数的列表,并且dir*
并不一定已经存在。
for f in *.txt; do mkdir dir${f: -5:1}; mv $f dir${f: -5:1}/; done
答案 2 :(得分:0)
使用GNU Parallel你会这样:
parallel mv {} {=s/file/dir/=} ::: *.txt